《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++
中,执行父类的构造函数时,子类的虚函数还未 创建 。
其实说 创建 不是十分准确,不过可以暂时这么理解。