#include <iostream>using namespacestd;classcfather{ Public: voidDisplay ()Const{cout<<"cfather::d isplay ()"<<Endl;}};classCSon: Publiccfather{ Public: voidDisplay ()Const{cout<<"CSon::d isplay ()"<<Endl;}};classCgrandson: Publiccson{ Public: voidDisplay ()Const{cout<<"Cgrandson::d isplay ()"<<Endl;}};voidShow (Cfather *ptr) {ptr-display ();}voidShowson (CSon *ptr) {ptr-display ();}intMain () {Cfather father; CSon Son; Cgrandson grandson; Show (&father); Show (&son); Show (&grandson); Showson (&grandson); GetChar (); return 0;}
Output Result:
Type compatibility principle: You can assign the address of a derived class object to a base class
Conclusion: But through this pointer to the base class type, only the members inherited from the base class can be accessed.
Effect: When a base class object occurs, the derived class only plays the role of the base class when overridden by a derived class object.
change the code below to access the data members:
#include <iostream>using namespacestd;classcfather{ Public: Cfather (): ITest ( -){}//Constructor member initialization voidDisplay ()Const{cout<<"cfather::d isplay ()"<<itest<<endl;}//contains itest intiTest;};classCSon: Publiccfather{ Public: voidDisplay ()Const{cout<<"CSon::d isplay ()"<<itest<<endl;}////Includes ITest};classCgrandson: Publiccson{ Public: voidDisplay ()Const{cout<<"Cgrandson::d isplay ()"<<itest<<endl;}////Includes ITest};voidShow (Cfather *ptr) {ptr-display ();}voidShowson (CSon *ptr) {ptr-display ();}intMain () {Cfather father; CSon Son; Cgrandson grandson; Show (&father);//ParentShow (&son);//ChildShow (&grandson);//SunShowson (&grandson);//ChildGetChar (); return 0;}
Results:
C + + type compatibility