C++笔记之虚函数

虚函数

virtual

        指定非静态成员函数为虚函数并支持动态调用派发

        虚函数是可在子类中重写定义的成员函数。当使用基类的指针或引用处理子类时,如果调用的是虚函数;则会调用子类中重写的虚函数

        注:父类中存在虚函数;子类中的同名函数满足:1)名称;2)形参列表;3)cv限定符;4)引用  一致则子类中的这个函数也是虚函数,不管有没有virtual关键字;同时会覆盖父类中的虚函数,不管有没有override后缀

        cv限定符:

        c:const         定义类型为常量

        v:volatile        定义类型为易变

override

        在成员函数声明或者定义中,override说明符确保该函数为虚函数并覆盖某个基类中的虚函数

个人理解:

        子类中的函数名后缀override,编译器会对父类进行检测,检测父类中是否存在这个函数名的虚函数,如果没有就报错。

        如果不加后缀override,编译器就不会自动检测,但是符合标准的重载事件依旧触发。

虚析构函数

        析构函数不被继承,但是父类的析构函数声明为virtual,那么子类的析构函数会始终重写父类

class Father
{
public:
    virtual ~Father(){std::cout<<"~Father\n";}
}
class Son:public Father
{
public
    ~Son(){std::cout<<"~son";}
}
int main()
{
    Father*fa=new Son;  //基类的指针指向子类
    delete fa;        //删除指针
}

/*
    结果
    1)调用基类Father的析构函数
    2)因为基类Father的析构函数是虚函数,所有调用子类Son的析构函数
    3)子类Son析构了,再调用基类Father的析构函数
*/

注:如果类是多态(声明或者基础了虚函数),且类析构函数不是虚函数; 这时删除时是未定义行为;所以,基类的析构函数必须是公开且虚,或者受保护且非虚

其他:

        非成员函数和静态成员函数不能是虚函数;

纯虚函数

     格式:

             virtual void FunctionName()=0;  

特征:

        在子类中必须重新声明(不需要=0)并进行定义;而在基类中不需要定义

注:有纯虚函数的类是抽象类,不能生成对象,只能派生子类;如果子类仍然没有定义纯虚函数,那么这个子类还是抽象类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值