一个课堂打印案例分析——《C++沉思录》第9章
来源:互联网 发布:windows 发送 消息 编辑:程序博客网 时间:2024/05/01 12:45
本章讲的是一个简单的打印案例,完全可用几行代码来完成,而面对问题不断复杂化,我们发现修改过程式的代码不足以支撑需求的多变。
作者构造了Picture类,汇总需求细节,见招拆招,尤其在“接口设计”这一节里,把自己当成客户,跟自己一问一答(“我希望有些什么操作,如何表述这些操作?”),逐步分析不断复杂的需求,然后抽象出接口,其中不乏作者的经验之谈:要想决定具体操作的形式,有一个好办法,就是试着使用这些操作,从使用的例子推导出操作的定义形式要比从头苦思冥想地发明这些操作容易得多。
1、最初需求是打印如下文字:
Paris
in the
Spring
in the
Spring
2、构造的Picture类,只需要一个构造函数和一个输出即可完成,如果打印如下文字:
+-------+
|Paris |
|in the |
|Spring|
+-------+
|Paris |
|in the |
|Spring|
+-------+
3、如果使用C式的过程代码,需要做些打印内容的改变可以完成,作者为Picture类添加了一个frame(Picture&)来完成,如果打印内容改变了,我想C式代码作者就会抓头皮了:
Paris +-------+
in the |Paris |
Spring|in the |
|Spring|
+-------+
in the |Paris |
Spring|in the |
|Spring|
+-------+
4、Picture类便有了 Picture operator |(const Picture&, const Picture&) 接口,用字符‘|’做两个Picture对象的横向合并,用Picture operator &(const Picture&,const Picture&)接口,用字符‘&’做纵向合并,当我们需要打印如下文字的时候:
+--------------+
|+------+ |
||Paris | |
||in the| |
||Spring| |
|+------+ |
|Paris +------+|
|in the|Paris ||
|Spring|in the||
| |Spring||
| +------+|
+--------------+
|+------+ |
||Paris | |
||in the| |
||Spring| |
|+------+ |
|Paris +------+|
|in the|Paris ||
|Spring|in the||
| |Spring||
| +------+|
+--------------+
我们只需要一句 cout << frame(frame(p) & (p | frame(p))) << endl即可完成。
下面是Picture类的源码(原书代码中有些许错误,均做过修改和测试):
测试代码:
- 一个课堂打印案例分析——《C++沉思录》第9章
- 《C++沉思录》-第九章-- 一个课堂练习的分析(上)
- 《C++沉思录》-第十章- 一个课堂练习的分析(下)
- 沉思录第9章笔记
- [C++]c++沉思录第10章例子“字符图像”
- 《C++沉思录》第5章 代理类——(整理)
- 用C++写字符图像类,参考C++沉思录第9、10章
- 【iOS沉思录】Objective-C中的多态性分析
- 单片机沉思录——static
- 单片机沉思录——再谈static
- 《C++沉思录》——面向对象
- C++沉思录-第5章 代理类
- C++沉思录-第6章 句柄
- 《C++沉思录》-第八章- 一个面向对象程序范例
- 表达式 《c++沉思录》第八章
- C++沉思录读书笔记(23,24章)- 设计一个针对C接口的C++包装类
- 《C++沉思录》的一个例子
- C++沉思录读书笔记(9,10章)-感想
- 高性能数据库树结构
- Log4j的基本应用
- java开发框架_ZK使用笔记二
- 【观点】我对CTO的理解 CTO要有技术魅力
- 用非静态类成员函数作为线程函数
- 一个课堂打印案例分析——《C++沉思录》第9章
- 用wine安装rtx
- JAVA远程方法调用入门指南
- linux oracle 安装
- Hadoop分布式文件系统:架构和设计要点
- 数据库优化中什么是星型转换(Star Transform)
- 超经典 网关是干什么用的
- JQuery网址收藏
- flex学习----flex的DataGrid