II-14-5. C++言語によるオブジェクト指向プログラミング

C++によるオブジェクト指向プログラミングの実現方法について解説する。C++におけるクラスの定義方法、コンストラクタ、デストラクタ、クラスの継承、オーバーライド、オーバーロード、多重継承などについて説明する。

【学習の要点】

* オブジェクトは状態を保持するためのプロパティと、オブジェクトの動作を定義するためのメソッドで構成され、これらをクラスによって定義する。

* クラスには、初期化を行うコンストラクタ、終了処理を行うためのデストラクタという特殊なメソッドを定義することができる。

* 既存のクラスを元に新しいクラスを作成することをクラスの継承といい、オーバーライドやオーバーロードによって元となるクラスのメソッドを再定義することができる。

図II-14-5. クラスの定義と継承

【解説】

1) クラスの定義

クラスはオブジェクトの状態を保持するためのプロパティ(メンバ変数)と、オブジェクトの動作を定義するためのメソッド(メンバ関数)を定義したものである。

通常は1つのソースファイルに1つのクラスの定義を記述する。

ソースファイルは、クラスのプロパティとメソッドのプロトタイプを記述した宣言部分と各メソッドの本体を記述する関数部分に分けられる。

宣言部分では「class」キーワードにより「class クラス名」のようにクラスの宣言を行う。アクセス識別子(public、private、protected)を指定し、プロパティおよびメソッドのアクセス制限を設定することができる。

- public :クラス外の誰でもアクセス可能

- private :クラス内のみアクセス可能

- protected :クラス内および派生クラス内のみアクセス可能

関数部分ではスコープ解決演算子「:: 」を用いて「クラス名::メソッド名」のように関数の記述を行う。

2) コンストラクタとデストラクタ

クラスからインスタンスを生成する時に呼び出される関数をコンストラクタ、インスタンスが破棄されるときに呼び出される関数をデストラクタと呼ぶ。

コンストラクタの名称はクラスの名称と同じもので定義する。コンストラクタは通常の関数と同様に引数を持つことが可能であるが、戻り値を持たない関数である。

デストラクタの名称はクラスの名称の前にチルダ「~」をつけたもので定義する。デストラクタは引数も戻り値も持たない関数である。

コンストラクタとデストラクタを明示的に定義していない場合、自動的に生成される。

3) クラスの継承

クラスはオブジェクトの属性や操作の雛形を定義したものであり、オブジェクト指向の要素である継承により具体的なオブジェクトを定義する新しいクラスを定義することができる。

継承元となるクラスを「基底クラス」、継承により作成したクラスを「派生クラス」と呼ぶ。

新しいクラスの固有の特性を持たせるため、オーバーライドやオーバーロードによって基底クラスのメソッドを再定義することができる。

* オーバーライドとオーバーロード

オーバーライドは基底クラスのメソッド名と同一の名称のメソッドを派生クラスで再定義することである。これにより、派生クラスの操作に特化した機能を同一のメソッド名で定義できる。

オーバーロードは同一クラス内でメソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することである。型の異なる変数に対して同じメソッド名で処理を行うことができる。

* 多重継承

複数のクラスから継承して新しいクラスを定義することを多重継承といい、異なる特性を持つ基底クラスを統合し、複数の特性を持つクラスを作成することができる。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン