Updated:

less than 1 minute read

개요

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


예제

  • 코드
     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 {};
           |       ^