ストリームクラスに対する自分の理解がいまいちなので、整理するために階層図を作ってみた。 元ネタは、『C++ 標準ライブラリ チュートリアル&リファレンス』 (アスキー) である。 とりあえずは骨格のみ。メソッドなどについては、おいおい肉付けしていく予定。
まずは、ストリームクラスの階層図。
太字にした basic_xxx は、
後ろに <> が付いていることからも分かるようにテンプレートクラスである。
それを char および wchar_t で特殊化したものが、istream や wistream
などになる、というわけだ。
ボックスの近くに書いてある < …… > は、
そのクラスを宣言または定義しているヘッダーファイルである。
とくに iosfwd はクラス名だけを宣言しており、
クラスの実体が不要な場合は、
できるかぎり iosfwd だけをインクルードするようにすべきである
(iosfwd の fwd は forward の略であろう)。
クラスの実体が不要な場合の例としては、
次のように istream 型の引数を取るような関数を宣言するだけという場合がある。
void foo( std::istream );
この場合は、istream がクラス名だということさえ分かっていればよいので、
iosfwd をインクルードするだけで充分である。
次は、ストリームバッファクラスの階層図。
ストリームバッファオブジェクトは、ストリームクラスオブジェクトによって保持され、 実際の入出力が行われるときに処理が移譲される。
初出: 2002年7月1日