(Modern C++) override, final

Posted by : at

Category : Cpp


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은 재정의를 막아준다


About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links