关于构造函数内调用虚函数的问题
发布日期: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;
 

 

实际的输出结果是:

 
  1. Base::Fuction

  2. A::Fuction

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

参考博客

上一篇:基类指针释放派生类对象方法
下一篇:总结了一下c/c++函数和变量的命名规则

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月11日 12时41分05秒