为什么父类指针可以指向子类,子类指针不能指向父类

class Base
{
public:
    int aa
};
class Child :public Base
{ 
public:
    int bb;
}

通过内存来查看数据:

Base是:
---------|
|占一个int数据大小--|
|----(aa 数据)----|
|---------
而Child则是:
---------|---------
|占一个int数据大小--|占一个Int数据大小--|
|从Base中继承而来---|---(bb数据-------|
|------------------

定义一个基类指针指向派生类:

Base *p = new child();  

因为p是Base类型指针,所以*p只能解释为Base类型的长度,如下

————————-|---------
|占一个int数据大小--|占一个Int数据大小--|
|从Base中继承而来- -|-----(bb数据)----|
|------------------
|------------|------------|
|-p只指向这个区域_--|
 

 

总结:

因此,当基类指针指向派生类的时候,只能操作派生类从基类中继承过来的数据。指向派生类的指针,因为内存空间比基类长,访问的话会导致内存溢出,所以不允许派生类的指针指向基类。

理解:

通常来说,子类总是含有一些父类没有的成员变量,或者方法函数。而子类肯定含有父类所有的成员变量和方法函数。所以用父类指针指向子类时,没有问题,因为父类有的,子类都有,不会出现非法访问问题。
但是如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量,就会出现非法,因为被子类指针指向的由父类创建的对象,根本没有要访问的那些内容,那些是子类特有的,只有用子类初始化对象时才会有。

参考链接:https://blog.csdn.net/zhouwei1221q/article/details/47953995

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

specterofblog

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值