钱能C++语言读书笔记(六)虚函数的限制

虚函数的限制

1、只有类成员函数才能声明为虚函数。

这是因为虚函数仅适用于有继承体系的类对象,所以普通函数不能声明为虚函数。

2、静态成员函数不能是虚函数。

因为静态成员函数不受对象的捆绑,即使形式上的捆绑。实际上也没有任何对象的信息,只有类的信息:

     void fn(Base & x)

     {

         x.staticfn();     //只是用了类的信息

         Base::staticfn(); //调用静态成员的推荐方式

     }

 

操作不受对象捆绑,也就失去了多态的条件。因为编译是在识别到对象的捆绑操作时,开始滞后捆绑犹豫的。也就是说,多态是针对不同对象的,执行同一名称的操作,而能强健地作出不同的抉择的机制。没有了对象的捆绑,也就失去了多态的前提,编译器也不会抉择,不会有丝毫的犹豫了。

3、内联函数不能是虚函数

因为内联函数是不能在运行中动态地确定其位置的。即使虚函数在类的内部定义,编译时,仍将其看做是非内联的。

4、构造函数不能是虚函数

因为构造时,对象还是一片无定形的处女地,只有在构造完成后,对象才能成为一个类的名副其实的对象。

5、析构函数可以是虚函数且通常声明为虚函数。

例如,当基类指针可能指向不同的子对象时,以该指针捆绑的释放空间操作,应该是针对不同类的析构函数的:

 

运行结果如下:

如果Base类的继承体系中,类的析构函数是虚函数,则在实施delete v[i]的时候,会相应地调用该对象捆绑的析构函数。向量中的元素是对象指针,有的指向基类对象,有的指向子类对象,所以在析构时,应该针对不同的对象实体做不同的析构操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值