#include <iostream> using namespace std; class CFather { public: void display() const { cout<<"CFather::display()"<<endl;} }; class CSon:public CFather { public: void display() const { cout<<"CSon::display()"<<endl;} }; class CGrandSon:public CSon { public: void display() const { cout<<"CGrandSon::display()"<<endl;} }; void show(CFather *ptr) { ptr->display(); } void showson(CSon *ptr) { ptr->display(); } int main() { CFather father; CSon son; CGrandSon grandson; show(&father); show(&son); show(&grandson); showson(&grandson); getchar(); return 0; }
输出结果:
类型兼容原则:可以将派生类对象的地址赋值给基类
结论:但是通过这个基类类型的指针,却只能访问到从基类继承的成员。
作用效果:基类对象出现的场合作用派生类对象进行替代后,派生类仅仅发挥出基类的作用。
下面改一下代码,访问数据成员:
#include <iostream> using namespace std; class CFather { public: CFather():iTest(100){}//构造函数成员初始化 void display() const { cout<<"CFather::display()"<<iTest<<endl;}//包含iTest int iTest; }; class CSon:public CFather { public: void display() const { cout<<"CSon::display()"<<iTest<<endl;}////包含iTest }; class CGrandSon:public CSon { public: void display() const { cout<<"CGrandSon::display()"<<iTest<<endl;}////包含iTest }; void show(CFather *ptr) { ptr->display(); } void showson(CSon *ptr) { ptr->display(); } int main() { CFather father; CSon son; CGrandSon grandson; show(&father);//父 show(&son);//子 show(&grandson);//孙 showson(&grandson);//子 getchar(); return 0; }
结果: