프로그래밍/Modern c++
override
오늘의논리
2023. 3. 6. 22:29
728x90
using namespace std;
class Creature
{
public:
};
class Player : public Creature
{
public:
virtual void Attack()
{
cout << "Player" << endl;
}
};
class Knight : public Player
{
public:
//재정의(override)
virtual void Attack() const// 이렇게 const 등이 붙이면 재정의가 아니라 새로운 함수가 됨
{
cout << "Knight" << endl;
}
//오버로딩(overloading) : 함수 이름의 재사용
void Attack(int a)
{
cout << "Knight(int a)" << endl;
}
private:
int _stamina = 10;
};
int main()
{
Player* player = new Knight;
player->Attack();
return 0;
}
이때
virtual void Attack() override
{
cout << "Knight" << endl;
}
이렇게 함수 이름 뒤 override 를 붙여주면 내가 최초가 아니라 부모 클래스에 있는 함수를 오버라이드 하고있다.라는 의미가 된다
당연하게도 부모함수가 없을경우 override를 붙이는것은 불가능
안전장치의 역할을 한다
추가로
부모 클래스에서
class Player : public Creature
{
public:
virtual void Attack() final
{
cout << "Player" << endl;
}
};
이렇게 final 을 붙여서 막을경우 하위 클래스에서 오버라이드 하는것이 불가능해 진다
728x90