#include <iostream> using namespace std; class Father { public: virtual void show() { cout<<"this is Father"<<endl; } }; class Son:public Father { public: virtual void show() { cout<<"this is Son"<<endl; } void shows() { cout<<"this is Son private"<<endl; } }; /* *只有子类可转为父类父类不可转为子类,因为子类包含父类所有的元素 *父类对象可接受任何子类对象---此时发生自动转型-->转为父类类型-->所以能够再转回来 */ int main() { Father f,*f1,f2; Son s,*s1; /* *子类向父类类型转换,直接强制转换就可以了,但实际仍然指向子类对象 *子类强制转换为父类对象时,并没有实际丢失它原有内存空间(比父类多的那些部分)只是暂时不可访问。所以能再转回来 *编译器进行切割,把子类从父类继承来的那一部分切割出来给父类 */ f1=(Father *)&s; f1->show();//调用的仍然是子类的函数 //父类转为子类,转置后,只能操作子类从父类继承那一部分 //Son *s=new Father; error s1=dynamic_cast<Son *>(f1);//再转回来 dynamic_cast在将父类cast到子类时,父类必须要有虚函数,多态性 s1->show(); s1->shows();//调用子类特有的函数 return 0; }