10. C++关键字virtual用法

本文详细介绍了C++中的虚函数、纯虚函数和虚基类的概念,展示了它们如何实现多态性,以及在构造函数、析构函数和抽象类中的应用。强调了虚继承在解决多继承问题上的作用,并提醒读者避免过度使用多继承以保持代码清晰和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. C++关键字:virtual用法
1.1 概念

virtual是C++ OO机制中很重要的一个关键字。主要用在两个方面:虚函数、纯虚函数和虚基类、虚继承。

1.2 虚函数

virtual放在函数的返回值前面,用于表示该类成员函数为虚函数;父类虚函数前的virtual必须写;子类虚函数前的virtual可以省略,因为不管省不省略,该函数在子类中也是虚函数类型;virtual只能出现在类内部的函数声明语句之前而不能用于类外部的函数定义

如下程序,在类Base中加了virtual关键字的函数就是虚拟函数(函数foo),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针p指向派生类Derived的对象时,对p的foo函数的调用实际上是调用了Derived的foo函数而不是Base的foo函数。这是面向对象中的多态性的体现。如下例程序,则会输出:“Derived”。

#include <iostream>
#include <memory>

struct Base {
    void bar();
    virtual void foo() {std::cout<<"Base";}
};
 
struct Derived : Base  {
    void foo() {std::cout<<"Derived";} 
};

int main() {
    std::shared_ptr<Base> p = std::make_shared<Derived>();
    p->foo();
}

这里“覆盖/重写”的必须要求是函数的特征标(包括参数的数目、类型和顺序)以及返回值都必须与基类中的函数一致,否则就属于重载了。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九五一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值