クラスの継承

■クラスの継承の書式
継承先(導出)クラス: アクセスコントロール 継承元(基本)クラス {...};

※アクセスコントロールはprivate/protected/publicのいずれかになる。また、アクセスコントロールによって継承元のアクセスメンバのアクセスレベルを変更することができます。下記を参照。

■private
 ・継承元のprivateメンバは継承先ではアクセスできません。
 ・継承元のprotectedメンバは継承先ではアクセスレベルがprivateになる
 ・継承元のpublicメンバは継承先ではアクセスレベルがprivateになる

■protected

 ・継承元のprivateメンバは継承先ではアクセスできません。
 ・継承元のprotectedメンバは継承先ではアクセスレベルがprotectedなる
 ・継承元のpublicメンバは継承先ではアクセスレベルがprotectedになる

■public
 ・継承元のprivateメンバは継承先ではアクセスできません。
 ・継承元のprotectedメンバは継承先ではアクセスレベルがprotectedなる
 ・継承元のpublicメンバは継承先ではアクセスレベルがpublicになる


クラスの継承のサンプルです。



#include <iostream.h>
#include <string.h>
#include <stdio.h> //getchar関数

class TControl
{
private:
 int a;
protected:
 int b;
public:
 int c;
 TControl(int d=0,int e=0,int f=0){a=d,b=e,c=f;}
 int Get_a(){return a;}
 void Set_a(int buf){a=buf;}
};

//TControlをpublicで継承---------------------------------------------------->
class TControl_Public :public TControl
{
public:
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //TControl_Public(int d=0,int e=0,int f=0){a=d,b=e,c=f;}

 TControl_Public(int d=0,int e=0,int f=0){Set_a(d),b=e,c=f;}
 void Show();
};

void TControl_Public::Show()
{
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;

 cout<<"a="<<Get_a()<<" b="<<b<<" c="<<c<<endl;
}

//TControlをprotectedで継承------------------------------------------------->
class TControl_Protected :protected TControl
{
public:
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //TControl_Protected(int d=0,int e=0,int f=0){a=d,b=e,c=f;}

 TControl_Protected(int d=0,int e=0,int f=0){Set_a(d),b=e,c=f;}
 void Show();
};

void TControl_Protected::Show()
{
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;

 cout<<"a="<<Get_a()<<" b="<<b<<" c="<<c<<endl;
}

//TControlをprivateで継承------------------------------------------------->
class TControl_Private :private TControl
{
public:
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //TControl_Private(int d=0,int e=0,int f=0){a=d,b=e,c=f;}

 TControl_Private(int d=0,int e=0,int f=0){Set_a(d),b=e,c=f;}
 void Show();
};

void TControl_Private::Show()
{
 //エラー:TControlのpraiveteメンバの[a]はアクセスできません。
 //cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;

 cout<<"a="<<Get_a()<<" b="<<b<<" c="<<c<<endl;
}

void main(void)
{
 TControl_Public   Control_Public(1,2,3);
 TControl_Protected Control_Protected(1,2,3);
 TControl_Private  Control_Private(1,2,3 );

 Control_Public.Show();
 Control_Protected.Show();
 Control_Private.Show();

//publicで継承した場合----------------------------------------------------->
 //エラー:privateメンバはアクセスできません。
 //cout<<Control_Public.a<<endl;
 //エラー:protectedメンバはアクセスできません。
 //cout<<Control_Public.b<<endl;
 //成功:publicメンバはアクセスできます。
 //cout<<Control_Public.c<<endl;

//protectedで継承した場合----------------------------------------------------->
 //エラー:privateメンバはアクセスできません。
 //cout<<Control_Protected.a<<endl;
 //エラー:protectedメンバはアクセスできません。
 //cout<<Control_Protected.b<<endl;
 //エラー:publicメンバはアクセスできません。
 //cout<<Control_Protected.c<<endl;

//privateで継承した場合----------------------------------------------------->
 //エラー:privateメンバはアクセスできません。
 //cout<<Control_Private.a<<endl;
 //エラー:protectedメンバはアクセスできません。
 //cout<<Control_Private.b<<endl;
 //エラー:publicメンバはアクセスできません。
 //cout<<Control_Private.c<<endl;


 getchar();

}

※結果は3つともa=1,b=2,c=3となる。







C++の基礎のページへ



ホーム PV ランキング