C++ 基类构造函数内调用虚函数会怎样
class CatBase
{
public:
CatBase()
{
show1();
}
~CatBase()
{
}
//virtual void show1() = 0; // 如果不实现,运行时会错误
virtual void show1()
{
cout << "cat base ..." << '\n';
}
};
class Cat :CatBase
{
public:
Cat()
{
}
void show1()
{
cout << "cat ..." << '\n';
}
};
int main()
{
Cat cat;
system("pause");
return EXIT_SUCCESS;
}
输出:
cat base ...
不会上升到派生类,因为派生类还没开始构造呢。
Note:
如果构造函数或析构函数调用了某个虚函数,则我们应该执行与构造函数或析构函数所属类型相对应的虚函数版本。
——《C++ Primer》 P557