ホームに戻る
クラスの継承
#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