C/C++编程日记:将不同类型的对象放进同一个容器

前言:不同类型的对象,放进同一个容器。(下文以数组表示容器)

代理类

问题:

现有不同种类的交通工具类派生层次,如下:

 

classVehicle{

public:

virtualdoubleweight()const=0;

virtualvoidstart()=0;

};

classAircraft:publicVehicle {

};

classAutomobile:publicVehicle {

};

 

我们想对一系列不同各类的Vehicle进行管理:

Vehicle parking_lot[1000];

 

不足:

抽象类不可实例化

若基类不是抽象类,类型转换会带来问题

 

经典解决方法:容器中存储基类指针

Vehicle* parking_lot[1000];

Automobile x;

parking_lot[0] = &x;

 

不足:

内存管理的负担

若容器中的指针在其它地方被释放,会造成大量野指针

经典解决方法的改进:容器中的指针指向原对象的副本

Vehicle* parking_lot[1000];

Automobile x;

parking_lot[0] =newAutomobile(x);

 

不足:

动态内存管理的负担

需要知道对象x的静态类型

再次改进:虚复制函数


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值