首页 > 其他 > 详细

20140424

时间:2014-04-25 02:48:34      阅读:507      评论:0      收藏:0      [点我收藏+]

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

例子:

bubuko.com,布布扣
#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;
}
bubuko.com,布布扣

20140424,布布扣,bubuko.com

20140424

原文:http://www.cnblogs.com/yexuannan/p/3687458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!