-3 c++
我编写了以下代码,我无法理解为什么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;
}
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么Enemy()构造函数被调用两次
因为它继承了它,Boss是类型的Enemy.构造a时Boss,都会调用of Boss和of 的构造函数Enemy.
// Redacted lines that aren't important.
Enemy enemy1;
Boss boss1;
Run Code Online (Sandbox Code Playgroud)
以上两行有效地创建了两个类型的实例Enemy.其中一个恰好不仅仅是一个Enemy,它是一个Boss.但它仍然是一个Enemy,因此Enemy为两个对象调用了构造函数.
我想问一下,通过使它们成为虚拟来覆盖成员函数,然后再次编写它们的定义是在类之间重写函数的"正确"方法.
是的.