我寫了下面的代碼,我不明白爲什麼Enemy()構造函數被調用兩次。另外,作爲一個側面問題,我想問一下,是否通過使成員函數變爲虛擬並重新編寫定義來重寫成員函數是覆蓋類之間函數的「正確」方式。被調用兩次的類構造函數
#include <iostream>
using namespace std;
class Enemy {
public: Enemy();
virtual void attack();
};
Enemy::Enemy() {
cout << "\nEnemy created";
}
void Enemy::attack() {
cout << "\nattack inflicts 10 damage";
}
class Boss: public Enemy {
public: Boss();
virtual void attack();
};
Boss::Boss() {
cout << "\nYou encounter a boss";
}
void Boss::attack() {
cout << "\nattack inflicts 30 damage";
}
int main() {
Enemy enemy1;
enemy1.attack();
Boss boss1;
boss1.attack();
return 0;
}
你正在創造兩個敵人 - 一個也恰好是一個老闆。所以爲每個敵人調用構造函數。 –
我讀到,costructors不會繼承繼承。這裏發生了什麼? – 101
不確定你的意思是「不要超越」,但如果你的意思是基類構造函數仍然會被調用,那麼是的,那就是發生了什麼。它也具有邏輯意義 - 你還能如何初始化基類中的私有成員? –