先看一段代码:
class base
{
public :
base()
{
localfunc();
}
virtual void localfunc(void) = 0;
};
void base::localfunc(void)
{
cout << "class base" << endl;
}
class derive : public base
{
public :
virtual void localfunc(void);
};
void derive :: localfunc(void)
{
cout << "class derive" << std;
}
int main(void)
{
class derive test;
return 0;
}
编译的时候,会有warning, 如果你注意到warning,很好;如果没有注意到, 那么~
打印输出如下:
class base;
不是:
class derive;
条款09中所说的意思是:在子类对象在父类构造期间(子类对象构造, 先调用父类的构造函数,再调用子类的构造的函数),对象的类型会变为 父类,而不是子类;所以virtual函数会被编译器默认为与父类对应的virtual函数。同样析构函数也是一样的。