本文主要是介绍父类指针指向子类对象,子类指针不能指向父类对象(六十六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.代码示例
class Parent
{
public:int a
};class Child :public Parent
{
public:int b;
}Parent类占内存大小范围:int a; 占4个字节.
Child类占内存大小范围:int a; 加上 int b;一共占8个字节.基类指针(Parent)指向派生类(Child):
Parent *p = new Child();
因为p是Parent类型指针,所以*p只能指向Parent类的int a(4字节长度),如果存在虚函数,就可以访问到子类函数和变量.Child *c = new Parent();
当Child指向父类时,如果c对象访问c->b,这样访问b的时候,就越界了.(因为Parent父类空间是4个字节
大小,不可能访问到8字节处的b变量).总结:
<1>.当基类指针指向派生类的时候,只能操作派生类从基类中继承过来的数据.
<2>.当派生类指向基类的指针,因为内存空间比基类长,访问的话会导致内存溢出,所以不允许派生类的指针
指向基类。加深理解:
<1>.通常来说,子类肯定含有父类所有的成员变量和方法函数.所以用父类指针指向子类时,没有问题
,因为父类有的,子类都有,不会出现非法访问问题.
<2>.如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量(基类是没有的),就会出现非
法访问;因为被子类指针指向的由父类创建的对象,根本没有要访问的那些内容,那些是子类特有的,只有用子类初始
化对象时才会有.
这篇关于父类指针指向子类对象,子类指针不能指向父类对象(六十六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!