next up previous contents
Next: 29.5 課題 27 Up: 29. C++とクラス Previous: 29.3 オブジェクトの利用

29.4 クラス

オブジェクト指向言語の特徴として上げられるのは、カプセル化、クラスの継承、 多態制(ポリモーフィズム)があります。カプセル化は上の説明で大体つきるので すが、残りの二つはまだ説明していません。また、クラスの継承や、多態性を 説明するには言語自体を勉強しないと難しいので、簡単に説明だけすると、 継承とは、クラスを定義する際に既に利用したものを利用出来るようにするため の仕組みで、プログラミングの生産性を上げるための仕組みとして導入されてい ます。具体的には触れませんが、親クラスから性質や、メンバ関数などは全て 引き継ぎつつ、新たなメンバ関数を親クラスにプログラムすることなく子供の クラス(派生クラスと言います)に付け加えることができます。これによって、 既にあるクラスをプログラムし直すことなく、再利用が可能になります。この ような仕組みを継承と言いますが、C++では複数の親クラスから性質を継承できる ようになっているためにこれを多重継承と呼びます。一方、この多重継承は 非常に複雑な性質なので、プログラムに特別の問題を引き起こすことが知られて おり、そのためにJavaでは多重継承は禁止され単一継承のみになっているという 違いがあります。最後の、多態性は上記の派生クラスのオブジェクトのポインタ などを利用してプログラミングする際の問題をうまく回避するための仕組みで 、少し難しい概念です。

その他に、C++にのみあって、Javaにはない機能として、フレンド関数や、 演算子のオーバロードがあります。前者は、親子関係にないクラス(関数)の間で、 private なデータをやりとりするための、言わば密輸のような仕組みです( ですから乱用は厳禁です)。後者の演算子のオーバロードは、演算を再定義する ための機能で、自分で新しい演算を定義することが出来ます。実は、 cout << で用いた << はこの機能を使って作られた新しい 演算であったのです(ちなみに、cout もある出力クラスのオブジェクトです)。



Noriyo Kanayama