有关虚函数(不能声明的和需要极力避免的)

本文探讨了C++中虚函数的使用限制,包括为何不能将普通函数、友元函数、内联函数、构造函数和静态成员函数声明为虚函数。同时,文章提醒在编程时应避免在构造和析构函数中调用虚函数,以防止未初始化的对象被调用或在析构过程中调用已析构内容的风险。虽然析构函数通常需要声明为虚的,但在构造过程中调用虚函数会导致错误的行为。
摘要由CSDN通过智能技术生成

首先看不能声明为virtual虚函数的情况:

  1. 普通函数(不能被覆盖)
  2. 友元函数(C++不支持友元函数继承)
  3. 内联函数(编译期间展开,虚函数是在运行期间绑定)
  4. 构造函数(没有对象不能使用构造函数,先有构造函数后有虚函数,虚函数是对对象的动作)
  5. 静态成员函数(只有一份大家共享)

再看需要避免的情况:

-简明概括:

先析构子类再析构父类,如果父类析构函数有虚函数,会导致调用子类的已经析构的内容。
先构造父亲类再构造子类,如果父类构造函数有虚函数,会导致调用子类还没构造的内容。

  • 避免构造函数声明为虚函数(如上)

    所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错.

  • 避免构造函数中调用虚函数

    在构造函数不要调用虚函数。在基类构造的时候,虚函数是非虚,不会走到派生类中,既是采用的静态绑定。显然的是:当我们构造一个子类的对象时,先调用基类的构

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值