검색결과 리스트
override에 해당되는 글 1건
- 2012.09.11 [C++11] override와 final
현재의 표준 C++에서는 부모 클래스의 특정 멤버를 오버라이드 할 때 virtual을 앞에 붙입니다.
struct Base
{
virtual void foo( int i );
};
struct Derived : Base
{
virtual void foo( int i );
}
위의 예제와 같은 작은 코드를 만질 때는 실수를 하지 않지만 실제 일을 할 때는 크고 많은 클래스를 다루다 보면 실수를 할 수 있습니다. 위 예제의 경우 아래와 같은 실수를 할 수 있습니다.
struct Derived : Base
{
virtual void foo( float i );
}
위와 같이 실수를 하면 Derived의 foo 멤버함수는 Base의 foo 멤버함수를 오버라이드 하지 않게 됩니다. 이런 실수는 에러가 아니기 때문에 골치 아픈 삽질을 할 수도 있습니다.
이런 문제를 방지하기 위해서 override가 새로 생겼습니다.
struct Derived : Base
{
virtual void foo( float i ) override;
}
이렇게 override를 사용하게 되면 컴파일 할 때 Base 클래스에
void foo( float i )가 없는데 오버라이드 한다고 에러를 발생시켜 줍니다.
때로는 Base 클래스의 특정 멤버함수를 Derived 클래스에서 오버라이드 하지 못하도록 막고 싶은 경우가 있을 것입니다. 이때는 final을 사용합니다.
struct Base
{
virtual void foo( int i ) final;
};
struct Derived : Base
{
virtual void foo( int i );
}
위의 코드에서는 Base 클래스의 foo 멤버함수를 final로 오버라이드 못하도록 해 놓았기 때문에 컴파일을 하면 에러가 발생합니다.
참고
댓글