基类指针指向派生类,派生类指针指向基类

       指向类的指针我们不妨理解为是一个大接口,这个大接口上又有很多小接口分别对应不同的成员变量或者成员函数,可以形象把大接口理解成游戏机的外壳,小接口就是上面的按钮。

       定义指向不同类的指针就是定义不同的大接口,即不同的游戏机。

       而将指针指向类时就是给这个大接口接上内存(对象),即给这个游戏机安装上内部硬件。

       对于基类与派生类,不妨认为B硬件就是A硬件加了一些硬件后所形成的。

       而虚函数,就是一个动态变化的小接口,不妨认为是一个可以根据硬件不同而自动更换硬件的按钮。

class A

{

public:

    virtual int x();

    int y();

......

};

class B:protected A

{

public:

    virtual int x();

    int y();

......

};

main0

{

    A aobjt;//定义的是A这种类型的内存(硬件)

    B bobjt;//定义的是B这种类型的内存(硬件)

    A*p_a;//定义的是A这种类型的接口,即A游戏机外壳

    B*p_b;//定义的是B这种类型的接口,即B游戏机外壳

    p_a=&bobjt;//将A接口接到B内存上,A类指针只能读取B类对象中的A类数据,即用A游戏机的外壳可以正常使用B硬件上的A的硬件,那么这个游戏机自然可以正常运行起来,注意的是B硬件新增的部分显然A外壳上没有对应的按键,所以无法使用这些新增部分。

    p_b=&aobjt;//将B接口接到A内存上,B类指针只能能读取A类对象中的数据,那么自然是这个程序可能会出错,一个游戏机,好几个按键用不了了,这个游戏就不一定能玩下去了。如果没有新增小接口,即新增按钮,那就不会报错。

    p_a->y();//这里调用的其实是B类继承过来的A中的y()函数,而不是B自己重新定义的y()函数,毕竟用的接口是A的,按钮是A的。

    p_b->y();//这里调用的是B类自己重新定义的y()函数(但是数据还是A类中的数据),而不是A类的y()函数。

    p_a->x();//这里要注意了,调用的是B类自己重新定义的x()函数,因为是虚函数,就和前面说的一样,这个按钮是可以自动变化的,它自动变成了B的对应按钮。

    p_-b>x();//这里同理,调用的是A类中自己的x()函数。

......

}

大概就是这样了,目前可能有些混乱或者错误,待我有时间了来整理下。

补充:单纯指针的赋值,只是传递相同数据的首地址,也就是说只要有相同数据就可以对指针进行赋值,是不会报错的,报错的是后面不小心用到了超出地址的部分

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值