2012/06/20

C++ クラスの継承

クラスを継承することで、クラスの全機能を引き継ぎつつ、新たな機能を加えることができる。

クラスの継承

#include <iostream>
//基底クラス(スーパークラス)
class Aclass{
public:
  Aclass();
  ~Aclass();
  void method1();
protected:
  int num;
};
//コンストラクタ
Aclass::Aclass(){
  std::cout << "Aclass constructor" << std::endl;
  num= 20;
}
//デストラクタ
Aclass::~Aclass(){
  std::cout << "Aclass destructor" << std::endl;
}
//メンバ関数
void Aclass::method1(){
  std::cout << "method1: " << num*2 << std::endl;
}
//派生クラス(サブクラス)
class Bclass : public Aclass{
public:
  Bclass();
  ~Bclass();
  void method2();
};
//コンストラクタ
Bclass::Bclass(){
  std::cout << "Bclass constructor" << std::endl;
}
//デストラクタ
Bclass::~Bclass(){
  std::cout << "Bclass destructor" << std::endl;
}
//メンバ関数
void Bclass::method2(){
  std::cout << "method2: " << num*4 << std::endl;
}
//メイン関数
int main(void){
  Bclass oBclass;//サブクラスをインスタンス化
  oBclass.method2();
  oBclass.method1();//スーパークラスのメソッドも使える
  return 0;
}
インスタンス化しているのは派生クラスの「Bclass」だけだが、基底クラスである「Acalss」のメンバ変数、メンバ関数が使えている。コンストラクタとデストラクタの呼び出し順もチェックしてみた。まずは基底クラスが呼び出されていく。デストラクタは逆で派生クラスから破棄される。
Aclass constructor
Bclass constructor
method2: 80
method1: 40
Bclass destructor
Aclass destructor


C++言語 Meadow & MinGW GCC 目次