개요
- 파생 클래스에서 가상 함수를 재정의 불가 혹은 클래스를 파생 불가하도록 지정
- 재정의 혹은 파생 시 컴파일 에러 발생
예제
- 코드
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 {};
| ^