1、父类指针指向子类
B b; A *pa; pa=&b;//A为父类,B为子类
第一步:子类对象指针&b隐式转换为父类指针
第二步:将转换后的得到的父类指针赋值给pa
2、子类指针指向父类
第一步:父类指针转换为子类时
假如用pc=dynamic_cast<C *>(pa),则父类A必须必须要有虚函数;
假如用pc=static_cast<C *>(pa),则父类A必须不需要有有虚函数;
第二步:将转换后的得到的子类指针赋值给pc
例子:
#include<iostream> using namespace std; class A { public: virtual void fa() { cout<<"使用dynamic_cast将父类指针转换为子类时,父类必须要有虚函数,此时父类才是多态类型"<<endl; } }; class B:public A { }; class C: public A { }; void main() { A a; B b; C c; A *pa; B *pb; C *pc; pa=&b; pa->fa(); cout<<dynamic_cast<B *>(pa)<<endl;//1、父类指针A转化为子类B,因为pa指向b,所以打印出0038FA70 cout<<dynamic_cast<C *>(pa)<<endl;//2、父类指针A转化为子类C,因为pa没有指向C,所以打印出00000000 (和1比较) cout<<static_cast<C *>(pa)<<endl;//3、父类指针A转化为子类指针C,虽然pa没有指向C,但是这里用static_cast,所以打印出0038FA70(和2比较) pb=dynamic_cast<B *>(&a);//父类指针转换为子类指针,因为&a并不是B类型,转换失败,所以打印出00000000() cout<<dynamic_cast<B *>(&a)<<endl; }
原文:http://www.cnblogs.com/yexuannan/p/3687458.html