クラスを継承することで、クラスの全機能を引き継ぎつつ、新たな機能を加えることができる。
クラスの継承
#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 目次