指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值

指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值

分类: C++   175人阅读  评论(0)  收藏  举报

可以安全地将一个指向基类成员的指针赋值给一个指向派生类的成员的指针,反过来不行。
另外,可将一个指向派生类对象的指针赋值给一个指向基类得指针,
即基类指针可在不加显式转换的情况下指向派生类对象。


代码测试如下,结果确实如上面所说:
      #include ...
        class Base
        {
        public:
                Base() {}
                virtual ~Base(){}                        
                virtual void show() { cout << "Base"; }
        };
        class Derived:public Base
        {
        public:
                Derived():Base() {} 
                ~Derived() {}
                void print() {}
                void show() { cout << "Derived"; }
        };

        int main()
        {
        Base base;                
        Derived derived;
               Base *pb = &derived;  // Ok,基类指针指向派生类对象;
        Derived *pd = &base;  // Error,派生类指针指向基类对象;
           pb->show();   //Ok,但输出 derived;
           pb->print();  //Error. 不可调用仅派生类有的方法;

        typedef void (Derived::*Pderived)();
        Pderived pmend = & Base::show;  // Ok,基类成员的指针赋值
                                               //给派生类成员的指针
        (derived.*pmend)();             // 使用派生类成员指针

          typedef void (Base::*Pbase)();
               Pbase pmenb = & Derived::show;  // Error.派生类成员的指针
                                               //赋值给基类成员的指针
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值