指针对指针赋值_把一个数组赋值给另一个数组

指针对指针赋值_把一个数组赋值给另一个数组派生类的二级指针为什么不能直接赋值给父类的二级指针?这主要涉及到派生类和父类之间的类型转换和内存布局的不同,当存在继承关系时,派生类会包含父类的成员,并可能还有额外的成员。由于派生类的对象在内存中的布局与父类不同,所以无法直接将派生类的二级指针赋值给父类的二级指针。例如下面的

派生类的二级指针为什么不能直接赋值给父类的二级指针?   这主要涉及到派生类和父类之间的类型转换和内存布局的不同,当存在继承关系时,派生类会包含父类的成员,并可能还有额外的成员。由于派生类的对象在内存中的布局与父类不同,所以无法直接将派生类的二级指针赋值给父类的二级指针。   例如下面的这个例子,先定义了一个Parent类和一个派生类Derived。在main函数中,创建了一个Derived类的对象,并将其地址赋值给Parent类的指针parentPtr,这是合法的向上转型。   接下来,创建了一个指向Parent*类型指针的二级指针parentPtrPtr,并将parentPtr的地址赋值给parentPtrPtr。现在想将parentPtrPtr转换为指向Derived*类型指针的二级指针derivedPtrPtr。但是,这个转换是非法的,因为类型转换时需要考虑对象的内存布局,而派生类和父类的内存布局不同。   为了避免这种类型转换的问题,如果需要将派生类的二级指针赋值给父类的二级指针,通常需要使用辅助变量来进行类型转换和安全的内存访问操作。谢谢~   一、因为每一个派生类对象内部都含有一个匿名的基类对象,所以:“利用派生类指针去初始化基类指针”或者“将派生类指针赋值给基类指针”都会导致表面上看来是让基类指针指向派生类对象,实际上是让基类指针指向“被派生类对象所含有的匿名基类对象”。如下:   基类指针ptrBase和ptrBase2表面上是指向了派生类对象derivedObj,实际上是指向了“被derivedObj所含有的匿名Base类型对象”。   二、因为每一个派生类指针的内部并不含有一个匿名的基类指针,所以:不能利用“指向派生类指针的指针”去初始化“指向基类指针的指针”,也不能将“指向派生类指针的指针”赋值给“指向基类指针的指针”。如下:   三、从另一个角度来理解:   1、因为派生类继承了基类,而“继承”体现了自然语言之中的“是一个”关系,所以每一个派生类对象都“是一个”基类对象,因而可以将一个派生类对象当作是一个基类对象来对待,所以可以让基类指针指向派生类对象。   2、然而派生类指针并没有继承基类指针,所以每一个派生类指针并不“是一个”基类指针,因而不可以将派生类指针当作是一个基类指针来对待,所以不可以让“指向基类指针的指针”指向派生类指针。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/48950.html

(0)
上一篇 2024年 9月 3日 下午11:26
下一篇 2024年 9月 3日 下午11:32

相关推荐

关注微信