用C++写字符图像类,参考C++沉思录第9、10章

本文探讨了字符图像处理的设计方案,通过定义一个基础类来管理不同类型的图像,如原始字符图像、加框图像等。文章还讨论了如何通过引用计数管理内存,并提出了一种按行显示图像的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个类需要实现的功能有:

将字符数组输入,显示

字符数组加框,横向组合,纵向组合,并显示


考虑到字符数组在显示过程中,实际上并未改变,可以采用引用计数的方式管理


考虑将这些不用的图像分成四类

①原始字符图像  ②加框图像 ③横向组合图像 ④纵向组合图像

其中①是基础,其他几种图像是在其基础上改变

可以考虑把①作为基类吗?


书上的做法是创建一个原始基类


那么这个基类将包含这几种图像的共同特点:

① 宽度高度 ②引用计数(便于管理对象)

接口则包括:

①设置宽度高度 ②取得宽度高度

③显示图像

显示图像的方式很关键,由于程序中最自然的方式为一行一行显示

那么能否在程序中实现一行一行显示,最终显示整个图像呢?

事实上,只要知道图像宽度高度,一行一行显示应该不难

而且我们可以把这个显示接口拆分成两个接口

①显示一行 ②显示所有行

这样做的好处在于,②这个接口的实现对于所有图像都是一样的,也就是可以是非虚方法

①接口则是对于不同图像类型是不同的

这样设计接口有助于减少代码冗余


实现完上述四个类后,发现一个问题:

其实真正需要引用计数的类只有 原始字符串类 ,因为只有它需要包含一个指向动态分配数组的指针,

但是似乎将引用计数从基类转移到这个类上,又会出现问题:无法为句柄类提供统一的接口,也就是句柄类

不知道它管理的这个对象到底需不需要引用计数。所以我在最后还是采用了在基类里加入引用计数。


我的收获

①设计一个良好的基类,能很好促进整个类实现

②使用句柄类和引用计数管理内存,并隐藏所管理的不同派生类之间的差异,为上层提供统一的接口


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值