next up previous
: コンストラクタとデストラクタの継承 : 継承 : クラスの継承

被保護メンバの使用

上の問題を考える時, 基本クラス stack1 で定義したスタックポインタの変数が 利用できれば, 派生クラス stack2 のメンバ関数の定義が簡単になるのは明らかであるが, アクセス指定子に publicprivate を指定しても 基本クラスの非公開メンバにはアクセスできない.

このような,一般にはアクセスを許さないメンバへの アクセスを可能にするには,アクセス指定子が,protected を使用する.

アクセス指定子 protected を指定すると, 基本クラスの非公開メンバにはアクセスできないが, 被保護メンバにはアクセスが可能となる.


class 基本クラス名 {
   int a;
   double b; // 非公開メンバ 
protected:
   float c;
   char d; // 被保護メンバ
public:
   int e;
   char f; // 公開メンバ
...
};
のようにクラスが定義されているとき, このとき派生クラスにおいて,

class 派生クラス名: protected 基本クラス名 {
...
};
とすると, 派生クラスのメンバ関数の定義において, 被保護メンバーにアクセスできる. 基本クラスの被保護メンバとして,スタックポインタの変数を宣言し, 派生クラスでアクセス指定子 protected を指定して継承することにより, スタックポインタの変数へのアクセスが行えるようになる.

問題 3-2

基本クラス stack1 で 変数 sparea[MAXSIZE] を被保護メンバとして 定義し, 派生クラス stack2 において stack1 をアクセス指定子 protected を指定して継承することにより, メンバ関数 multipop を定義せよ.



Takeshi Kumagai 平成19年6月19日