#include "iostream.h" class Base { public: int base; Base(){cout<<"Base 的构造函数,并置成员base的值为0"<<endl;base=0;} ~Base(){cout<<"Base 的析构函数"<<endl;} void base_f(){cout<<"Base 的一般函数,并改变成员base的值为1"<<endl;base=1;} }; class Sub:public Base { public: int sub; Sub(){cout<<"Sub 的构造函数,并置成员sub的值为0"<<endl;sub=0;} ~Sub(){cout<<"Sub 的析构函数"<<endl;} void child_f(){cout<<"Sub 的一般函数,并置成员sub的值为1"<<endl;sub=1;} }; void main() { Sub a; //定义了一个子类的对象 Sub c=a; //因为有赋初值的操作,所以在c的产生过程中不会在调用任何构造函数!!! Base* p=&a; //定义了一个指向父类的指针,它可以指向子类,但这个指针也无法访 //问子类比父类多出来的数据(属性和方法)比如:p->child_p() Base& r=a; //定义了一个对Base的引用,但引用的是子类,那么这个引用也无法访 //问子类比父类多出来的数据(属性和方法)比如:r.child_p() Base b=a; //子类的对象a赋给父类的对象b,子类比父类多出来的数据(属性和方法) //会被过滤掉,同时发现在定义b时,同时给b赋初值为a的话会导致不需调 //用Base类的构造函数!!!(同上,关于c的定义) //a=b; //子类的对象值可以赋给父类的对象,反之则不行!! //Sub* p2=&b; //子类的指针不能指向父类!反之可以! } //coder_jack@126.com日记写到200903310001