对象切割,指针和引用对多态的支持
来源:互联网 发布:运营优化具体体现在 编辑:程序博客网 时间:2024/05/01 06:55
对象切割:
一般来说派生类分配的存储空间大于基类分配的存储空间,如果不通过指针和引用而是直接将派生类对象复制给基类对象就会造成切割。
切割导致无法通过基类调用基类的成员函数。
例子:
class Bear : public ZooAnimal{}
Bear b;ZooAnimal za = b; za.rotate();//调用ZooAnimal::rotate()
直接通过对象复制引起切割。也就是说多态所造成的“一个以上的类型”的潜在力量,也就是基类和多个派生类之间关系,并不能够实际发挥在“直接存取object”这件事情上。因此,OO程序设计并不支持对object的直接处理(《深度探索C++对象模型》)。
ZooAnimal za;ZooAnimal *pza;Bear b;pza = &b;将za或者b的地址,指定给pza,没有问题。一个指针或引用之所以支持多态,是因为他们并不引发内存中任何"与类型有关的内存委托操作“。会受到改变的只有他们所指向的内存的”内容和解释方式“。
但是当把一个基类直接初始化为一个派生类时,派生类会被切割以塞入较小的基类中,因此多态就不存在。因为切割后包含内容不同。如下:
Bear b;ZooAnimal *pz = &b;Bear *pb = &b;他们每个都指向Bear object的第一个byete. 其间的差别是,pb所涵盖的地址包含整个Bear obeject,而pz所涵盖的地址只是包含Bear 对象中的 ZooAnimal 实例。
0 0
- 对象切割,指针和引用对多态的支持
- 对指针和引用的理解
- 类对象的指针和引用
- 引用 指针和对象的区别
- 类对象的指针和引用
- 对象的常指针和常引用
- 对象指针和对象引用
- 对象指针和对象引用
- 对象指针和对象引用
- 对象和对象指针以及对象引用的使用
- 对用父类指针(或引用)指向父类对象和子类对象时,从而用父类指针或者引用访问成员时的深刻理解;
- Java 对象、引用和指针
- 对引用和指针使用以及函数返回引用和指针类型的理解
- 对引用和指针使用以及函数返回引用和指针类型的理解
- 对引用和指针使用以及函数返回引用和指针类型的理解
- C--我对指针和引用const之后的理解
- 对C++中指针和引用的认识
- 对指针引用和值传递的理解
- Sigar介绍与使用
- Java中的数据存储(堆及堆栈)
- js实现两个单选按钮,选不同的选项弹出显示不同的下拉框
- Caffe代码导读(2):LMDB简介
- Android零碎记录
- 对象切割,指针和引用对多态的支持
- Throwable(一)源码分析
- 【图书资料】图像处理网址大全
- EL表达式 (详解)
- 交叉熵代价函数(cross-entropy cost function)
- Caffe代码导读(3):LevelDB例程
- Android最流行的网络框架
- Causedby:java.lang.ClassNotFoundException:org.aspectj.lang.annotation.Around
- android使用自己的字体文件