ITPub博客

首页 > IT职业 > IT生活 > 读书笔记:10章一个课堂练习的分析(下)3

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

原创 IT生活 作者:karlyang88 时间:2007-01-21 17:53:34 0 删除 编辑
C++沉思录第十章读书笔记3[@more@]

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

10-2 体验设计的灵活性

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

可以改变边框字符。

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

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

class Picture {

friend ostream& operator<<(ostream&, const Picture&);

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_Pic和VCat_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博客 ” ,链接:https://blog.itpub.net/409557/viewspace-892175/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    35
  • 访问量
    336363