virtual 특성의 상속 |
앞서 우리는 오버라이딩이란 무엇인지 알아 보았다. 그 중 virtual 이라는 키워드를 잠깐 알아 봤는데, 한가지 빼먹은 것이 있었다. 바로 오버라이딩에서의 virtual의 특징은 그것의 특성도 상속된다는 것이다.
- #include <iostream>
- using namespace std;
- class AAA
- {
- public:
- virtual void fct(){
- cout<<"AAA"<<endl;
- }
- };
- class BBB : public AAA
- {
- public:
- void fct(){
- cout<<"BBB"<<endl;
- }
- };
- class CCC : public BBB
- {
- public:
- void fct(){
- cout<<"CCC"<<endl;
- }
- };
- int main(void)
- {
- BBB* b=new CCC;
- b->fct();
- AAA* a=b;
- a->fct();
- delete b;
- return 0;
- }
위의 소스코드에서 BBB 클래스가 상속하고 있는 AAA 클래스의 Virtual void fct함수가 B클래스의 fct 함수에 의해서 오버라이딩 되어 지고 있다. 이 경우 오버라이딩을 하는 BBB 클래스의 fct 함수도 자동으로 virtual 키워드가 들어가게 된다. (명시적으로 써주나 안써주나 똑같지만, 코드의 가독성을 위해 써주는 것이 좋다. )
- class BBB : public AAA
- {
- public:
- virtual void fct(){
- cout<<"BBB"<<endl;
- }
- };
C클래스도 마찬가지이다.아래와 같이 써주자.
- class CCC : public BBB
- {
- public:
- virtual void fct(){
- cout<<"CCC"<<endl;
- }
- };
이것을 실행하면 어떤 결과를 출력하느냐? 앞서 오버라이팅 포스팅 부분에서도 언급했듯이 아래와 같은 결과를 출력하는것을 알 수 있다.
만약 BBB,CCC 클래스가 없다고 가정할 경우를 생각해보자. AAA클래스만 있다고 하면, virtual은 의미를 가지지 않는다. virtual이라는 키워드는 오버라이딩 관계에 의해 상속되어질때만 의미를 지니기 때문이다.
댓글 없음:
댓글 쓰기