第23章 書式制御 その1


Cのprintfでは、いろいろな書式を設定して出力することが できました。C++ではどうするのでしょうか。 わからなければ、Cの方法をそのまま取り入れれば よいのですが、せっかくC++をやっているので C++の方法について解説します。

前章では、coutが、ostreamクラスのオブジェクトであると書きました。 じゃ、メンバ関数なんかも定義されてるのかな?はい、定義されています。 ヘルプを見ればわかります。VC++1.51を例にとってヘルプを見てみましょう。 他のコンパイラでも似たようなものだと思います。

まず、メニューバーのHelpをクリックします。そして、C/C++languageを 選択します。「その他のトピック」に「iostreamリファレンス」と いうのがありますから、これをクリックして下さい。 あー、いっぱいクラスが出てきたでしょう。iostreamの中では、これだけのクラスが 定義されています。では、ostreamクラスをクリックしてみましょう。 難しげな説明がいろいろ書いてあります。全部無視して「メンバ」というボタンを クリックして下さい。

書式制御に関係ありそーなものないけど・・・

はい、では1つ前に戻って「階層」ボタンを押してみて下さい。 ostreamクラスは、iosクラスから派生していることがわかります。 では、iosクラスを見てみましょう。階層図の一番上にある「iosクラス」 をクリックして下さい。iosクラスの説明が出てきたはずです。 ここで、「メンバ」ボタンを押してみて下さい。

「フラグ、書式アクセス関数」という項目に 「setf」というのがありますね。これを使います。

long setf( long lFlags ); long setf( long lFlags, long lMask );

このメンバ関数は、引数1個のものと2個のものがオーバーロード されていることに注意して下さい。関数のオーバーロードについては もう、バッチリわかっていますね。わからない人は、 第4章を復習して下さい。 まずは、例を見て下さい。

hexだの、octだのはiosクラスで定義されているので 必ずios::を付けて下さい。そして、cout.setf(ios::hex); のように使います。これでこれ以後はcout << x; でxが、16進で表示されます。ios::octなら8進表示です。 ここで、注意しなくてはいけないのは、cout.setfを実行したなら 必ずcout.unsetfを実行して下さい。そうしないと、 次のcout.setfがうまく働きません。

実行結果は左のようになります。 でもなんだか面倒くさいですね。 そこで、引数を2つもつsetfを使います。 第2引数にios::basefieldを付けてやります。

ios::basefieldを付けると、unsetfしなくても大丈夫です。

結果は、左の通りです。書式制御については まだまだ、たくさんありますが今回はこのへんで やめておきましょう。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Feb/04/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。