オレオレクラスを ostream に出力する

C++ プログラミング入門 によると、print() というメンバ関数を作って、operator<< から呼び出すらしい。

class Foo
{
    ...
public:
    void print(ostream* out) const { *out << value; }
    ...
};

ostream& operator<<(ostream& out, const Foo& foo);

なんで print なのか?
なんで ostream& じゃなくて ostream* なのか?

operator<< の実体は、print() を呼び出すだけの簡単なお仕事です。

ostream& operator<<(ostream& out, const Foo& foo)
{
    foo.print(&out);
    return out;
}

これで cout << foo << endl; とかできるようになる。