class Player
{
public:
void Attack()
{
cout << "Player" << endl;
}
};
class Knight : public Player
{
public:
void Attack() // override
{
cout << "Knight" << endl;
}
// cf) overloading : 함수 이름의 재사용
}
int main()
{
Knight* knight = new Knight();
knight->Attack(); // Knight
Player* player = new Knight();
player->Attack(); // Player : 원하던 정보가 아님!
}
class Player
{
public:
virtual void Attack()
{
cout << "Player" << endl;
}
};
// ...
int main()
{
Player* player = new Knight();
player->Attack(); // Knight : Okay!
}
- override : 재정의 되었음을 알린다.
class Knight : public Player
{
public:
void Attack() override
{
cout << "Knight" << endl;
}
void Attack() const override // Error - 부모에 있는지도 확인이 가능
// ...
final은 재정의를 막아준다