[C++] final과 override

Date:     Updated:

카테고리:

태그:

이 글은 C++ final과 override를 공부하고 정리한 글입니다.
final은 클래스나 가상 함수를 파생 클래스에서 오버라이딩 못 하도록 한다.
override는 잘못된 가상 함수 오버라이딩을 막아준다.

final 키워드

  • 클래스나 가상 함수를 파생 클래스에서 오버라이딩 못 하도록 하려면 final 키워드를 사용
  • 당연히 가상 함수가 아니면 쓸 수 없음
  • 컴파일 도중에 확인

    코드 예제

    // 예시 1 : 클래스의 상속을 막는다
    // Dog.h
    class Dog final : public Animal       // Dog 클래스를 더 이상 상속 못받게 함
    {
    };
    
    // Corgi.h
    #include "Dog.h"
    class Corgi : public Dog       // 에러
    {
    };
    
    // 예시 2 : 함수의 재정의를 막는다
    // Dog.h
    class Dog : public Animal
    {
    public :
        virtual void SetWeight(float weight) final;   // SetWeight 함수를 더 이상 재정의 못하게 함
    };
    
    // Corgi.h
    class Corgi final : public Dog 
    {
    public :
        virtual void SetWeight(float weight) override;    // 에러
    };
    

override 키워드

  • 잘못된 가상 함수 오버라이딩을 막으려면 override 키워드를 사용
  • 당연히 가상 함수가 아니면 쓸 수 없음
  • 컴파일 도중에 확인

    코드 예제

    // Animal.h
    class Animal
    {
    public :
        virtual void SetWeight(float weight);
        virtual ~Animal() = default;
    };
    
    // Dog.h
    class Dog : public Animal 
    {
    public :
        virtual ~Dog() override = default;  // 부모의 소멸자가 가상 소멸자로 보장됨(아니면 에러)
        virtual void SetWeight(float weight) override;
    };
    


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기