【发布时间】:2013-01-15 14:59:30
【问题描述】:
main.cpp
#include <iostream>
class BaseClass {
public:
BaseClass() {
init();
}
virtual ~BaseClass() {
deinit();
}
virtual void init() {
std::cout << "BaseClass::init()\n";
}
virtual void deinit() {
std::cout << "BaseClass::deinit()\n";
}
};
class SubClass : public BaseClass {
public:
virtual void init() {
std::cout << "SubClass::init()\n";
}
virtual void deinit() {
std::cout << "SubClass::deinit()\n";
}
};
int main() {
SubClass* cls = new SubClass;
delete cls;
return 0;
}
为什么 init() 和 deinit() 没有被正确覆盖,并且调用 BaseClasses 的方法而不是 SubClasses 的方法?需要什么条件才能让它发挥作用?
BaseClass::init()
BaseClass::deinit()
【问题讨论】:
-
@LightnessRacesinOrbit:很抱歉。我没有直接将问题与构造函数和析构函数联系起来,我猜这就是我没有找到这个问题的原因。
-
我猜理由是
SubClass的构造函数被允许假设BaseClass在执行时完全被构造。析构函数也类似。
标签: c++ inheritance virtual-functions