C++/C++
override 와 final 키워드
Elan
2021. 3. 26. 05:33
virtual 과 override
클래스의 멤버함수를 재정의할 수 있도록 만들 때 사용되는 키워드 virtual
부모 클래스의 멤버함수를 재정의할 때 사용되는 키워드 override
struct A {
virtual void Foo() {
}
};
struct B :A {
virtual void Foo() override{
}
};
B클래스에서 부모클래스 A의 Foo 함수를 재정의 할 경우 override 키워드를 붙여주므로써
개발자에게 함수를 재정의를 했다는 것을 명시해줄 수 있다. ( C++ 11부터 등장, 안붙여도 오류는 없다 )
만약 override를 붙이지 않는다면 해당 함수가 재정의된 것인지 원형인지구분이 어려울 것이다.
final
재정의한 함수를 더이상 재정의할 수 없도록 하는 키워드 final
struct A {
virtual void Foo() {
std::cout << "This is A's Foo function" << std::endl;
}
};
struct B :A {
virtual void Foo() final{
std::cout << "This is B's Foo function" << std::endl;
}
};
struct C : B
{
virtual void Foo() override {
std::cout << "This is C's Foo function" << std::endl;
}
};
B클래스에서 final 키워드를 붙여 Foo함수를 재정의하였다.
더이상 재정의 하지 않을 최종판이라는 의미이다.
위의 코드는 컴파일에러 E1850 을 뱉는다.
C 클래스에서 최종판이 확정된 B클래스의 Foo 함수를 재정의하려 했기 때문이다.