[译者按] 本文根据发表在cuj expert forum上的两篇文章编译而成.c/c++ user´s journal是目前最出色的c/c++语言专业杂志,特别是在c++ report闭刊之后,cuj的地位更加突出.cuj expert forum是cuj主办的网上技术专栏,汇集2000年10月以来c++社群中顶尖专家的技术短文,并免费公开发布,精彩纷呈,是每一个c/c++学习者不可错过的资料.由jim hyslop与herb sutter主持的conversation系列,是cuj expert forum每期必备的精品专栏,以风趣幽默的对话形式讲解c++高级技术,在c++社群内得到广泛赞誉.译者特别挑选两篇设计模式方面的文章,介绍给大家.设计模式方面的经典著作是gof的design patterns.但是那本书有一个缺点,不好懂.从风格上讲,该书与其说是为学习者而写作的教程范本,还不如说是给学术界人士看的学术报告,严谨有余,生动不足.这一点包括该书作者与象bjarne stroustrup这样的大师都从不讳言.实际上design pattern并非一定是晦涩难懂的,通过生动的例子,一个中等水平的c++学习者完全可以掌握基本用法,在自己的编程实践中使用,得到立竿见影的功效.这两篇文章就是很好的例证.本文翻译在保证技术完整性的前提下作了不少删节与修改,以便使文章显得更紧凑.
人物介绍: 【程序编程相关:一个生成RSS2.0的php类(转载)】
---------------------------------------------------------- 【推荐阅读:commons-beanutils 1.】
wendy --- 公司里的技术大拿,就坐在我旁边的隔间里,c++大虾,最了不起的是,她是个女的!她什么都好,就是有点刻薄, 【扩展信息:软件如何在中国盈利...】
我 --- 一个追求上进的c++程序员,尚在试用期,聪明但是经验不足.
我对她真是又崇拜又嫉妒.
----------------------------------------------------------
i. virtually yours -- template method模式
我在研究wendy写的一个类.那是她为这个项目写的一个抽象基类,而我的工作就是从中派生出一个具象类(concrete class).这个类的public部分是这样的:
class mountie {
public: void read( std::istream & ); void write( std::ostream & ) const; virtual ~mountie(); 很正常,virtual destructor表明这个类打算被继承.那么再看看其protected部分:protected:
virtual void do_read( std::istream & ); virtual void do_write( std::ostream & ) const;也不过就是一会儿的功夫,我识破了wendy的把戏:她在使用template method模式.public成员函数read与write是非虚拟的,它们肯定是调用protected部分do_read/do_write虚拟成员函数来完成实际的工作.啊,我简直为自己的进步而飘飘然了!哈,wendy,这回你可难不住我,还有什么招数?尽管放马过来... 突然,笑容在我脸上凝固,因为我看到了其private部分:
private:
virtual std::string classid() const = 0;这是什么?一个private纯序函数,能工作么?我站了起来,
... 下一页