Advertisement

c++多态特性看懂这一篇就够了

阅读量:

什么是多态?有哪些分类?

多态概念与行为封装

有两种类型的多态性:

编译时的多态性。编译时的多态性是通过重载来实现的。

运行时的多态性。运行时的多态性是通过虚成员实现的。

构造函数为什么不能是虚函数?

  1. 从存储空间的角度来看,虚函数需要对应一个vtable,而该vtable实际上被存储在对象的内存空间中。由此引发一个问题:如果构造函数被定义为虚函数,则需要借助vtable进行调用。然而,在对象尚未实例化的情况下,内存空间尚未分配,因此无法定位到vtable的存在,这导致构造函数无法被定义为虚函数。
  2. 从使用角度来看,构造函数的核心功能是初始化对象实例,此时使用虚函数并无实际意义。因此,没有必要将构造函数设置为虚函数。虚函数的主要作用在于通过父类的指针或引用调用时能够动态绑定到子类对应的成员函数。而构造函数是在创建对象时自动调用的,并不会通过父类的指针或引用进行调用,因此规定构造函数不能是虚函数。
    3、构造函数既不需要也不允许被定义为虚函数,因为在创建对象时我们通常会明确指定其类型。尽管可能通过基类的指针或引用访问该对象,但这一特性并不适用于构造过程本身。
    **4、从实现机制来看,**vbtl是在构造函数执行完成后才被建立起来的,因此在构造阶段无法实现虚函数的功能,这也决定了构造函

全部评论 (0)

还没有任何评论哟~