C++是很危险的:第一章 构造函数:第二节 构造函数与多态

《C++是很危险的》中的代码全部来自网络及各种C++相关的书籍。 目的不是为了谴责C++, 而是希望大家注意C++中的某些细节。 这些细节在实际工程中根本用不到,所以大家就当笑话看看就好。

以下代码会输出什么?

#include <iostream>

using namespace std;

class Base
{
public:
    Base()
    {
        data=createNumber();
    }
    int getData()const
    {
        return data;
    }
protected:
    virtual int createNumber()const
    {
        return 3;
    }
private:
    int data;
};

class Derived : public Base
{
protected:
    virtual int createNumber()const
    {
        return 4;
    }
};

int main()
{
    Base *a=new Derived;
    cout<<a->getData()<<endl;
    return 0;
}

答案

答案是3。

解释

C++中,执行父类的构造函数时,子类的虚函数还未 创建

其实说 创建 不是十分准确,不过可以暂时这么理解。

目录啦啦啦