というように連続して使うことができました。 どんどん差し込んでいっているように見えるので「差込演算子」(insertion operator) とも呼ばれます。cout << a << "xxx" << endl;
では、オペレーター・オーバーロードのところでやったようにこの演算子に
ユーザーが勝手に新しい定義を付け足してもよいのでしょうか。
はい。できます。しかし、うまく定義しないと上の例のように 次々と差込ができなくなってしまいます。
のように定義します。ある型(もちろんクラスも含みます)Tについての 差込演算子の定義の仕方です。「&」に注意して下さい。これは参照です。 理屈はともかく、実際の例を見てみましょう。例題は、 平面の座標を表すクラスxy_position(筆者が勝手に考えたクラス) について差込演算子の定義を作ってみましょう。ostream& operator << (ostream& o, const T& t);
これは、ほぼ決まった書き方です。メンバ関数のX(),Y()の後ろに
constがついていることに注意して下さい。これは、
第13章を参照して下さい。
演算子定義のところでconst xy_position& pとしているので
必要なのですね。この定義で<<は( , )と出力するよう定義しています。
はい、新しい差込演算子を実行するとこうなりました。
「あれー?よく見ると変だな」と言っている人はいませんか。 一つは、参照の表し方ですね。第6章では
のように書き表しました。しかし、int &a = b;
と書いても同じことです。int& a = b;
しかし、当然のことながらfunction(a, b)と いう考え方もできますね。この場合ちょっとした注意が必要です。 functionはフレンド関数でなくてはいけません。 どうして、フレンド関数でなくてはいけないって?ちょっと考えてみて下さい。class Xのオブジェクトaに対して a + b の演算を a.function(b) のような感じで解説しました。
Update Feb/04/1997 By Y.Kumei