上の問題を考える時,
基本クラス stack1 で定義したスタックポインタの変数が
利用できれば,
派生クラス stack2 のメンバ関数の定義が簡単になるのは明らかであるが,
アクセス指定子に public や private を指定しても
基本クラスの非公開メンバにはアクセスできない.
このような,一般にはアクセスを許さないメンバへの
アクセスを可能にするには,アクセス指定子が,protected を使用する.
アクセス指定子 protected を指定すると,
基本クラスの非公開メンバにはアクセスできないが,
被保護メンバにはアクセスが可能となる.
class 基本クラス名 {
int a;
double b; // 非公開メンバ
protected:
float c;
char d; // 被保護メンバ
public:
int e;
char f; // 公開メンバ
...
};
のようにクラスが定義されているとき,
このとき派生クラスにおいて,
class 派生クラス名: protected 基本クラス名 {
...
};
とすると,
派生クラスのメンバ関数の定義において,
被保護メンバーにアクセスできる.
基本クラスの被保護メンバとして,スタックポインタの変数を宣言し,
派生クラスでアクセス指定子 protected を指定して継承することにより,
スタックポインタの変数へのアクセスが行えるようになる.
問題 3-2
基本クラス stack1 で
変数 sp と area[MAXSIZE] を被保護メンバとして
定義し,
派生クラス stack2 において stack1 をアクセス指定子 protected を指定して継承することにより,
メンバ関数 multipop を定義せよ.