thể trùng lặp:
Calling virtual functions inside constructorsC++ phương pháp ảo trọng
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;
}
Tại sao init()
và deinit()
không overriden đúng cách và phương pháp của BaseClasses ar e được gọi thay vì các SubClasses? Các yêu cầu để làm cho nó hoạt động là gì?
BaseClass::init()
BaseClass::deinit()
@LightnessRacesinOrbit: Xin lỗi vì điều đó. Tôi đã không trực tiếp liên kết vấn đề với các nhà xây dựng và destructor, mà tôi đoán là lý do tại sao tôi đã không tìm thấy câu hỏi này. –
Tôi đoán rằng sự biện minh là phương thức khởi tạo 'SubClass' được cho phép giả định rằng' BaseClass' được xây dựng hoàn toàn khi nó đang thi hành. Tương tự cho destructor. –