「C++/C++特有の概念」の版間の差分
削除された内容 追加された内容
タグ: 2017年版ソースエディター |
→オブジェクト指向との関連: operator<< は cout のメンバー関数であるとの誤解に基づいている部分を修正。 タグ: 2017年版ソースエディター |
||
103 行
=== オブジェクト指向との関連 ===
クラスを用いたプログラムをオブジェクト指向プログラムと呼びます<ref>オブジェクト指向プログラミングには、クラスを用いずプロトタイプを用いる別の手法もあります。</ref>。
そのため、上のC++のhello, worldの例はオブジェクト指向プログラムの例です。
この例で用いられているオブジェクト指向について簡単にまとめます。
110 行
<pre>
関数printfを、文字列 "hello, world"
</pre>
116 行
<pre>
cout
</pre>
という考えへの移行が行われています。
こ
例えば、Cでは標準出力に出力する時には次のようにprintf関数を使いました。
135 ⟶ 131行目:
:<syntaxhighlight lang="C">
fprintf(f, "abc"); // fはFILE型へのポインタ
</syntaxhighlight>
147 ⟶ 143行目:
</syntaxhighlight>
:と等価で、他にも sprintf() などもあり、手続き型言語なりの派生体系が作られています。
:そもそも型FILEは、内部構造の隠蔽が図られている考えられています。
</ref>。
161 ⟶ 158行目:
となり、同じ名前の関数 <nowiki> operator<< </nowiki> を用いることが出来ます。
ここで、<nowiki> operator<< </nowiki> は、
このように、
==== 演算子のオーバーロード ====
177 ⟶ 171行目:
operator<<(cout, "abc");
</syntaxhighlight>
という関数呼出しと等価です(実際に動くコードです)。
演算子のオーバーロードは、「新しい数値型」を定義する場合などでは素晴らしい効果を発揮しますが、ファイルストリームにシフト演算子を適用するようなケースは「予め了解された体系」ではないので賛否両論があります。
|