최대 1 분 소요

개요

  • 파생 클래스에서 가상 함수를 재정의 불가 혹은 클래스를 파생 불가하도록 지정
  • 재정의 혹은 파생 시 컴파일 에러 발생


예제

  • 코드
    class A {
    	public:
    		virtual void func1(){};
    		virtual void func2(){};
    };

    class B : public A {
    	public:
    		virtual void func1(){};
    		virtual void func2() final{};
    };

    class C final : public B {
    	public:
    		virtual void func1(){};
    		virtual void func2(){};
    };

    class D : public C {};

    int main() { return 0; }
  • 실행 결과
    main.cpp:16:30: error: virtual function ‘virtual void C::func2()’ overriding final function
       16 |                 virtual void func2(){};
          |                              ^~~~~
    main.cpp:10:30: note: overridden function is ‘virtual void B::func2()’
       10 |                 virtual void func2() final{};
          |                              ^~~~~
    main.cpp:19:7: error: cannot derive from ‘final’ base ‘C’ in derived type ‘D’
       19 | class D : public C {};
          |       ^