读书笔记:9章一个课堂练习的分析(上)1

C++沉思录第九章读书笔记[@more@]

第九章:一个课堂练习的分析(上)

想要学会游泳,就得亲自下水

9-1 问题描述

目标编写一系列用以操作“字符图象”的类和函数。所谓字符图象,就是一个可打印的矩形字符阵列

首先创建图象,

#include< iostream.h>

#include "Picture.h"

char* init[] = {"Paris", "in the", "Spring" };

int main()

{

Picture p(init, 3);

cout << p

}

打印结果:

Paris

In the

Spring

+------+

|Paris |

|in the|

|Spring|

+------+

有边框无边框左右对齐。

Paris +------+

in the|Paris |

Spring|in the|

|Spring|

+------+

9-2 接口设计

当解决此类问题时,如果能够把自己放在用户立场上去审视问题,能读问几句:“我希望有些什么样的操作,如何表述这样的操作?”,那会是很有益处的。

必须生成和打印图象,以3种方式组合图象。

加像框:1p.frame(), 2:frame(p)取决于究竟是希望加边框以修改原图,还是希望产生一个新图象。另一方面:如果我们会使用复杂的表达式来构建Picture对象,则frame(p)更易于理解,特别是当p本身就是一个含有括号的复杂表达式的时候。

表示横向和纵向的连接:1hcat(p,q),vcat(p, q) 2:更紧凑的写法,操作符。为了能更容易的建构复杂的图象。

#include

class Picture {

public:

Picture(const char* const*, int

};

ostream& operator<

Picture frame(const Picture&);

Picture operator&(const Picture&, const Picture&);

Picture operator|(const Picture&, const Picture&);

9-3 补遗

一个Picture需要一个指针,需要一个复制构造函数,一个析构函数,以及一个赋值操作符,此外,为了定义Picture对象数组,还需要一个缺省构造函数。

class Picture {

public:

Picture();

Picture(const char* const*, int);

~Picture();

Picture& operator=(const Picture&);

};

ostream& operator<

Picture frame(const Picture&);

Picture operator&(const Picture&, const Picture&);

Picture operator|(const Picture&, const Picture&);

9-4测试接口

能编译,不能进行连接。

#include

#include "Picture.h"

char *init[] = { "Paris", "in the ", "Spring" }

int main()

{

Picture p(init, 3);

cout << p << endl;

Picture q = frame(p);

cout <

Picture r = p|q:

cout << r << endl;

Picture s = q&r;

cout << s <

}

可以写的更紧凑些,得到最后那个图。

Picture p(init, 3);

Picture q - frame(p);

cout << frame(q&(p|q)) <

9-5 策略

如何表示一个Picture.实际上是一个二维字符数组。C++并不直接支持二维数组。

class Picture {

private:

int height, width;

char *data;

char& pisition(int row, int col) {

return data[row*width+col];

}

char position (int row, int col) const {

return data[row*width +col];

}

//...

};

区别:一个在const Picture 上执行操作,返回所需字符的一个副本,另一个允许直接读写给定字符的左值。(仔细思考一下。)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/409557/viewspace-892046/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/409557/viewspace-892046/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值