next up previous
: 多重継承 : 継承 : 被保護メンバの使用

コンストラクタとデストラクタの継承

クラスを継承する場合, コンストラクタ関数やデストラクタ関数は, 基本クラスや派生クラスの両方に含めることができる.

両方のクラスにコンストラクタが定義されている場合, まず,基本クラスのコンストラクタが実行され,ついで, 派生クラスのコンストラクタが実行される.

逆に,デストラクタは,まず,派生クラスのデストラクタが実行され, ついで基本クラスのコンストラクタが実行される.


class circle {
protected:
  float radius; /* 半径 */
public:
  circle(float r) { radius = r; }
  ...
};

class disc: protected circle {
  float thickness; /* 厚さ */
  float volume;    /* 体積 */
public:
  disc(float t, float r): circle(r) {
    thickness = t;
    volume = t * r * r * 3.14;
  }
  ...
};

上の例では, 派生クラス disc でコンストラクタを定義している. その定義 disc(float t, float r): circle(r) において, circle(r) は,基本クラスのコンストラクタに 渡す引数を示す.

問題 3-3 縦,横の長さと面積を 被保護メンバの変数として持つ長方形を表すクラスと, その派生クラスで, 縦,横,高さの長さと体積を 変数として持つ直方体を表すクラスを 定義せよ. 直方体のクラスのオブジェクトは, 生成時に,コンストラクタの引数として縦,横,高さの値を指定するものとする. (教科書 p.242 の 5. 参照)



Takeshi Kumagai 平成19年6月19日