320x100
virtual 키워드는 상속 받는 자식 클래스에서 override해서 구현하라는 의미로 부모클래스에서 사용된다.
보통의 가상 함수는 override를 강제하지 않고 옵션으로 두지만, 순수 가상 함수로 선언해 자식 클래스에서 무조건 구현해야 하도록 만들 수 있다.
override 키워드는 부모의 가상함수를 재정의 했다는 의미로 사용된다.
재정의 하는 경우는 다음과 같은 성질을 만족해야 한다.
- 부모 클래스 함수가 반드시 가상 함수 이어야한다.
- 부모의 함수와 자식의 함수 이름이 반드시 동일해야한다. (소멸자 예외)
- 부모의 함수와 자식의 함수 매개변수 형식들이 반드시 동일해야한다.
- 부모의 함수와 자식의 함수 const 성이 반드시 동일해야한다.
- 부모의 함수와 자식의 함수 반환형식과 예외 명세가 호환되어야한다.
- 멤버 함수들의 참조 한정자(reference qualifier)가 동일해야한다. (C++11 추가)
class Parent
{
public:
virtual func_a() {} // 가상함수
virtual func_b() = 0; // 순수 가상함수
};
class Child : public Parent
{
public:
// virtual func_a() override { } // OK
// virtual func_b() override { } // ERROR
}
final 키워드는 더 이상의 상속 또는 재정의를 방지할 때 사용한다.
class A
{
virtual void func_a() = 0;
};
class B final : class A
{
};
class C : public B // ERROR
{
}
class D : public A
{
void func_a() override final;
}
class E : D
{
void func_a(); // ERROR
}
320x100
'프로그래밍 > C,C++' 카테고리의 다른 글
C2143 구문 오류: ';'이(가) '*'앞에 없습니다. (0) | 2021.12.20 |
---|---|
매번 헷갈리는 const 정리 (0) | 2021.12.15 |
Macro 확장을 이용한 factory 만들기 (0) | 2021.10.26 |
set_new_handler (0) | 2021.10.26 |
c++ Infographics & Cheat Sheets (0) | 2021.10.18 |