欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于构造函数内调用虚函数的问题

程序员文章站 2022-05-14 12:02:06
...

在构造函数不要调用虚函数。在基类构造的时候,虚函数是非虚,不会走到派生类中,既是采用的静态绑定。显然的是:当我们构造一个子类的对象时,先调用基类的构造函数,构造子类中基类部分,子类还没有构造,还没有初始化,如果在基类的构造中调用虚函数,如果可以的话就是调用一个还没有被初始化的对象,那是很危险的,所以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;
 

 

实际的输出结果是:

 
  1. Base::Fuction

  2. A::Fuction

利用上面的原理即可分析出结果。

参考博客

  1. c++ 构造函数里可以调用虚函数吗
  2. C++中构造函数能调用虚函数吗?
相关标签: c++