1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include "stdafx.h" #define DEBUG class A{ int i; public: A(){ i=0; } virtual void Print() { printf("%d\n",i);} }; class B : public A { int i; public: B(){ i=1; } virtual void Print() { printf("%d\n",i);} }; class C : public B { int i; public: C(){ i=2; } virtual void Print() { printf("%d\n",i);} }; void main() { A* ap; B b; C c; ap=&b; ap->Print(); ap=&c; ap->Print(); #ifdef DEBUG //cmd char e; scanf("%c",&e); #endif } |
베이스 클래스이 포인터를 이용하여 하위 클래스의 멤버 함수를 호출하기 위해서는 멤버 함수가 가상이어야 한다.
즉, 하위 클래스에서 오버라이딩할 것 같은 함수는 베이스에서 모두 가상으로 선언한다.