[译者按] 本文根据发表在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++学习者完全可以掌握基本用法,在自己的编程实践中使用,得到立竿见影的功效。这两篇文章就是很好的例证。本文翻译在保证技术完整性的前提下作了不少删节与修改,以便使文章显得更紧凑。
人物介绍: 【相关文章:php5中类的一些新的特征】
---------------------------------------------------------- 【扩展阅读:[水晶报表]分组时控制每页显示的组数目】
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纯序函数,能工作么?我站了起来,
“wendy,你的mountie类好像不能工作耶,它有一个private virtual function。”
... 下一页