上の問題を考える時,
基本クラス 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
を定義せよ.