
关于构造函数内调用虚函数的问题
发布日期:2021-05-07 17:51:46
浏览次数:14
分类:精选文章
本文共 493 字,大约阅读时间需要 1 分钟。
在构造函数不要调用虚函数。在基类构造的时候,虚函数是非虚,不会走到派生类中,既是采用的静态绑定。显然的是:当我们构造一个子类的对象时,先调用基类的构造函数,构造子类中基类部分,子类还没有构造,还没有初始化,如果在基类的构造中调用虚函数,如果可以的话就是调用一个还没有被初始化的对象,那是很危险的,所以C++中是不可以在构造父类对象部分的时候调用子类的虚函数实现。就是根据构造顺序原理。
class Base
{ public: Base() { Fuction(); } virtual void Fuction() { cout << "Base::Fuction" << endl; } }; class A : public Base { public: A() { Fuction(); } virtual void Fuction() { cout << "A::Fuction" << endl; } }; // 这样定义一个A的对象,会输出什么? A a;
实际的输出结果是:
-
Base::Fuction
-
A::Fuction
利用上面的原理即可分析出结果。
参考博客