问题引入:
比如:如果我们想在父类的构造函数中调用虚函数,当定义子类对象的时候,父类的构造函数中的虚函数执行的是子类中的函数。
在下面的例子中,定义子类对象的时候,在父类构造函数中的print虚函数执行的不是子类中的print函数,而是父类中的print函数。
#include <iostream>
using namespace std;
class Parent
{
public:
//在父类的构造函数里面,调用虚函数,不会产生多态。。
//言外之意:不会调用子类的虚函数。。。。
Parent(int a = 0)
{
print(); //定义子类对象的时候,想该print函数调用的是子类的print函数。。结果表明调用的是父类的print函数
this->a = a;
}
//第一个动手脚的地方 编译器应该对这个虚函数特殊处理。。。。
virtual

在C/C++中,父类构造函数中调用虚函数不会执行子类的重载函数。这是由于对象创建时Vptr指针先初始化为指向父类的虚函数表,待子类构造函数执行时才会更新指向子类的虚函数表。因此,在构造过程中调用虚函数无法体现多态性。
最低0.47元/天 解锁文章
1779

被折叠的 条评论
为什么被折叠?



