可能な重複オーバーライド:
init()
とdeinit()
適切にオーバーライドし、BaseClasses'メソッドされていないのはなぜ
Calling virtual functions inside constructorsC++の仮想メソッドが
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;
}
をar SubClassesの代わりに呼ばれるe?それを動作させるための要件は何ですか?
BaseClass::init()
BaseClass::deinit()
@ LightnessRacesinOrbit:申し訳ありません。私はこの問題をコンストラクタとデストラクタに直接関連付けることはしませんでした。私はこの疑問を見つけませんでした。 –
私は、 'SubClass'のコンストラクタは、' BaseClass'が実行時に完全に構築されていると想定することが許されていると考えています。デストラクタに似ています。 –