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
C++ 컴파일러가 실제로 가리키는 객체의 자료형을 기준으로 하는게 아니라
포인터 변수 (AClass *) 의 자료형을 기분으로 판단 하기때문에
AClass *a = b;
a ->sub ();
오버라이딩 함수에 virtual 키워드가 없다면 포인터 변수 (AClass *) 가 기준이
되어서 대입 돼는 변수 b 의 BClass 가 a 로 대 입이 안되고 AClass 가 대입 된다
왼만 하면 오버라이딩 할떄 virtual 키워드 생각해서 쓰자
JAVA 에서 의 super.fun(); 은
BClass 오버라이딩 함수 안에서 부모클래스::함수를 호출 하면 된다
virtual void sub(){
AClass ::sub ();
}
'Programming > C++' 카테고리의 다른 글
25. 열거형 (0) | 2017.12.20 |
---|---|
24. 확장열 (0) | 2017.12.20 |
23. C 언어 사용자 정의형 typedef 새로운 타입을 만든다. (0) | 2017.12.20 |
22. 아스키 코드 (0) | 2017.12.20 |
18. 반환형이 참조자 인 경우 (0) | 2017.12.20 |
17. 참조자를 이용 한 Value - By - Reference (0) | 2017.12.20 |
16. 참조자 (0) | 2017.12.20 |
15. Inline(인라인)함수 #define(매크로 함수) (0) | 2017.12.20 |