c++ 常见问题问与答(C++对话系列)

[入库:2005年11月10日] [更新:2008年9月11日]

本文简介:本文档以对话的形式向您详细介绍在C++编程中所遇到的问题以及其解答.介绍了auto_ptr再回忆、空引用、起源、谁的代码更易于移植?、通过任何其他名字、 Virtually Yours、方形尖塔等知识。

当温迪和我回到办公室时,我坐在计算机旁,相当轻松就整理出基类:
class Base
{
private:
    // … 一些数据,与本主题无关 …
    virtual std::string classID() const { return "Base"; }
protected:
    // 当派生类装入自身后,应该调用该函数的父类实现。
    virtual void do_read( std::istream& );
    // 当派生类保存完自身后,应该调用该函数的父类实现。
    virtual void do_write( std::ostream& ) const;
public:
    // … 需要实现的一些虚拟函数,与本主题无关…
    // Streaming functions.
    void read( std::istream& );
    void write( std::ostream& ) const;
    virtual ~Base();
};
// 流处理过程中的几个帮助函数。注意它们并非友元!
std::ostream& operator <<
( std::ostream& o, const Base& b) { b.write(o); }
std::istream& operator >>
( std::istream& o, Base& b) { b.read(o); }
// [3]
“很好,我的孩子,”Guru的声音又在我的身后响起。我从椅子上蹦了起来,责怪自己怎会没有想到她的来访。她接着说:“把你的成果简单地跟我说说。”
“很简单,”等Guru坐到客椅上,我回答说,“通过重载的<<操作符,Base::write会被调用,这里是它的实现:”
void Base::write( std::ostream& o ) const
{
o << classID() << std::endl;
do_write(o);
}
“嗯,模板方法模式(Template Tethod pattern),”Guru点点头,“你真聪明,我的孩子[4]。”

本方案相关附件

本文关键:,c++,编程,问题,问与答,
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top