当前位置:  开发笔记 > 编程语言 > 正文

构造函数的虚函数调用

如何解决《构造函数的虚函数调用》经验,为你挑选了1个好方法。

也许我错了,但这似乎是一个非常基本的问题.突然间,我的继承链停止了工作.编写一个小的基本测试应用程序证明我错了(所以我不能责怪编译器).

我有一个基类,在虚函数中具有默认行为.子类派生自那个并改变行为.

#include 

class Base
{
public:
    Base() { print(); }
    ~Base() {}

protected:
    virtual void print() { std::cout << "base\n"; }
};

class Child : public Base
{
public:
    Child() {}
    ~Child() {}

protected:
    virtual void print() { std::cout << "child\n"; }
};

int main()
{
    Base b;
    Child c;
}

这打印:

base
base

创建Child实例时,为什么调用Base :: print()?我认为通过使用virtual关键字,可以替换派生类的函数.

在什么时候我让自己感到困惑?



1> mghie..:

您正在构造函数中调用一个虚拟方法,该方法不起作用,因为子类尚未完全初始化.

另请参阅此StackOverflow问题.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有