请问构造函数中能否调用虚函数,为什么?
help
...全文
相关推荐
c++ 构造函数中调用虚函数的实现方法
因此,构造函数中调用虚函数的行为取决于调用时刻,即对象的状态。在对象完全构造之前,调用虚函数会执行基类版本;而在完全构造之后,会执行与对象实际类型匹配的版本。
为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?
构造函数中为什么不能调用虚函数? 构造函数调用层次会导致一个有趣的两难选择。试想:如果我们在构造函数中并且调用了虚函数,那么会发生什么现象呢?在普通的成员函数中,我们可以想象所发生的情况——虚函数的调用是在运行时决定的。这是因为编译时这个对象并不能知道它是属于这个成员函数所在的那个类,还是属于由它派生出来的某个类。于是,我们也许会认为在构造函数中也会发生同样的事情。 然而,情况并非如此。对于在构造函数中调用一个虚函数的情况,被调用的只是这个函数的本地版本。也就是说,虚机制在构造函数中不工作。 这种行为有两个
为什么构造函数不能是虚函数
### 为什么构造函数不能是虚函数#### 一、引言在面向对象编程中,构造函数和虚函数是两个非常重要的概念。构造函数用于初始化对象的状态,而虚函数则支持多态性,允许基类指针或引用调用派生类的方法。
构造函数不能声明为虚函数,析构函数可以声明为虚函数
**动态绑定需求**:虚函数的主要作用在于实现动态绑定,即根据对象的动态类型来决定调用哪个函数版本。然而在构造函数执行时,对象的动态类型尚未完全确定,因此无法进行动态绑定。
基类子类虚函数的调用顺序问题
如果需要在子类构造函数中调用重写后的虚函数,可以考虑使用构造函数初始化列表或者在子类构造体内部完成,以确保对象完全初始化后再调用虚函数。


资源
