본문 바로가기

Programming/C++

21. C++ 상속 오버라이딩 가상함수

class AClass {
public:
        virtual void sub(){
               printf("\nAClass\n" );
       }
};

class BClass : public AClass {
public:
        virtual void sub(){
               AClass::sub ();
               printf("\nBClass\n" );
       }
};

BClass *b = new BClass();
b->sub ();

AClass *a = b;
a->sub ();

////////////////////////////////////////////////
AClass

BClass

AClass

BClass

C++ 컴파일러가 실제로 가리키는 객체의 자료형을 기준으로 하는게 아니라

포인터 변수 (AClass *) 의 자료형을 기분으로 판단 하기때문에

AClass *a b;
a ->sub ();

오버라이딩 함수에 virtual 키워드가 없다면 포인터 변수 (AClass *) 가 기준이
 되어서 대입 돼는 변수 b 의 BClass 가 a 로 대 입이 안되고 AClass 가 대입 된다

왼만 하면 오버라이딩 할떄 virtual 키워드 생각해서 쓰자

JAVA 에서 의 super.fun(); 은 

BClass 오버라이딩 함수 안에서 부모클래스::함수를 호출 하면 된다
virtual void sub(){
     AClass ::sub ();
}