c++ 沉思录学习
代理类
c++ 沉思录介绍代理类,由一个需求引入,如下:
设计一容器,使此容器有包含不同类型的而彼此相关联的对象?
如书中,以Vehicle为例,定义Vehicle抽象类,其他各个实际的类均继承此抽象类;此处使用继承技术。
1 传统处理方法
书中举3种处理方式进行说明,简单说明如下:
定义: Vehicle parking_lot[1000]; 此数组容器,存储停于停车场上的所有Vehicle
(1) 直接将定义的对象,赋值于parking_lot, 此种情况会丢失对象的某些数据,具体可参考c++之父的《c++程序设计原理与实践》
(2) 赋值对象的引用,引入的问题是当原对象delete后,parking_lot中的指针将成为悬挂指针,故需改进
(3) 此方法是对2的改进,将对象的副本赋值于parking_lot, 此时引入显示进行动态操作,而且增加动态内存管理的负担
2 基于上面的讨论,作者使用虚copy函数,由copy生产对象的副本,复制于parking_lot。具体实现可参加c++深思录,也可参考《c++程序设计原理与实践》
3 抽象类
抽象类:实质上是对Vehicle对象使用的类,以Vehicle对象为数据的一种类。通过定义此类的默认构造函数,赋值函数,赋值构造函数,析构函数,实现对对象的拷贝与引用。
(未完待续)
总结:抽象类通过将抽象类对象进行封装,实现将不同对象放入一个容器种的功能;其次通过抽象类种copy纯虚函数,实现对内存分配的控制;析构函数完成对对象的释放。