读书笔记:10章一个课堂练习的分析(下)3

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

第十章:一个课堂练习的分析(下)3

10-2 体验设计的灵活性

之所以重新设计,目的之一就是增加灵活性。增加一操作,增加灵活性,就是图象重新装裱。

可以改变边框字符。

首先考虑第九章的初始设计,是否可以作到?在该设计中,根本没有办法判断某一个字符究竟是图象Picture的一部分还是围绕这个Picture组件的一部分。所以根本没有办法找到边框。

在当前设计中, 一个Picture的结构在相应的P_Node类型中有设有显式地体现出来,因此,这样的结构应该提供reframe操作所需要的句柄。

class Picture {

friend ostream& operator<

friend Picture frame(const Picture&);

friend Picture reframe //新增加的

(const Picture&, char, char, char );

//...

};

Picture reframe(const Picture& pic, char c, char s, char t)

{

return pic.p->reframe(c, s, t);

}

class P_Node {

friend Picture reframe(char, char, char);

virtual Picture reframe(char, char, char ) = 0;

//...

};

//如何为每种类型实现reframe

Picture String_Pic::reframe(char, char, char)

{

use++;

return this; //使用私有Picture 构造函数

}

//注意增加引用计数表明还有另一个用户在使用底层的String_Pic,

//重新装裱HCat_PicVCat_Pic也是很简单的,只要把各组件Pictures重装裱

Picture Vcat_Pic::reframe(char c, char s, char t)

{

return new Vcat_Pic{

::reframe(top, c, s, t);

::reframe(bottom, c, s, t)

}

}

Picture HCat_Pic::reframe(char c, char s, char t)

{

return new HCat_Pic{

::reframe(left, c, s, t);

::reframe(right, c, s, t);

}

}

//注意我们装裱组件Pictures时,使用了::操作符,调用全局reframe函数

//如果没有,就错了,全局参数四个

//重新设计Frame_Pic

class Frame_Pic: public P_Node {

friend Picture frame(const Picture&);

Frame_Pic(const Picture&,

char = "+', char = '|', char = '-');

int height() const;

int width() const;

void display(ostream&, int, int ) const;

Picture reframe(char, char, char);

Picture p;

char corner;

char sideborder;

char topborder;

};

//修改了Frame_Pic的构造函数

Frame_Pic::Frame_Pic

(const Picture& pic, char c, char s, char t) :

p(pic), corner(c), sideborder(s), topborder(t) {}

Picture Frame_Pic::reframe(char c, char s, char t)

{

return new Frame_Pic(::reframe(p, c, s, t), c, s, t);

}

//最后需要重写display,用上那些存储起来的边框字符。

10-3结论

在解决问题的时候,一定要记住,不仅要看到眼前的问题,还要看到长远的变化。在这个问题中:图象是有结构的。

另一个:我们可以利用继承对这些结构进行建模。这一认识让我们使用引用计数技术来管理内存。

最后,我们认识到即使需要显示图象,也无需要重新设定图象的字符。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值