ホームに戻る
 クラスの継承

#include <iostream>

/*
*
*   クラスの継承
*
*   クラスはメンバ変数やメンバ関数を、
*   継承というかたちで追加や改変できる。
*   継承後のメンバ変数のアクセス権は、
*   継承のアクセス権の設定によって異なる。
*
*   publicの場合
*     public    -> public
*     protected -> protected
*     private   -> アクセス不可
*
*   protectedの場合
*     public    -> protected
*     protected -> protected
*     private   -> アクセス不可
*
*   privateの場合
*     public    -> private
*     protected -> private
*     private   -> アクセス不可
*
*   注意点は継承先のコンストラクタを呼ぶ前には、
*   かならず継承元のコンストラクタが呼ばれることである。
*
*/

class A{
protected:
  int na;
public:
  A(){this->na = 1; std::cout << "const A" << std::endl;}
  A(int n){this->na = n;}
  ~A(){std::cout << "dest A" << std::endl;}
  void printNumA(){std::cout << na << std::endl;}
};

class B : public A{  // クラスBはクラスAを継承
  int nb;
public:
  B(){this->nb = 2; std::cout << "const B" << std::endl;}
  B(int n) : A(n-1){this->nb = n;}  // 呼び出す継承元コンストラクタは指定できる
  ~B(){std::cout << "dest B" << std::endl;}
  void printNumA(){std::cout << na << std::endl;}  // na はprotectedなので呼べる
  void printNumB(){std::cout << nb << std::endl;}
};

using namespace std;

int main(){
  B b1;
  B b2(4);

  b1.printNumA();
  b1.printNumB();

  b2.printNumA();
  b2.printNumB();

  return 0;
}

 結果

const A
const B
1
2
3
4
dest B
dest A
dest B
dest A

inserted by FC2 system