看下面代码:
class MyBase
{
public:
MyBase()
{
myFunc();
};
virtual void myFunc(){};
}
class SubA : public MyBase
{
virtual void myFunc(){};
}
SubA mySub;
这时运行SubA mySub;这句是到底发生了什么呢?由于在构造SubA mySub时,SubA 的父类MyBase的构造函数会先被调用,这时SubA部分还没初始化,也就是这个对象还只是MyBase类型的,而MyBase的构造函数里又调用了myFunc(),所以SubA ::myFunc不会被调用,而只是调用了MyBase::myFunc,析构函数类似,所以务必注意使用。