継承されたアクセス制御

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/dxd_123456/article/details/78066895

1、アクセス制御の単一のクラス
我々はすべての意識はなく、前のレッスンでも語られた制御の単一のクラスへのアクセス:
公共メンバ変数修正法は内部クラスのクラスの外で使用することができます。
保護:クラス内で使用される修飾メンバ変数法、サブクラスは、利用可能な継承、外側の他のクラスを使用することができません。
プライベート:唯一のメンバ変数をすることができ修正された方法は、クラス内、クラス外で使用することはできません。
2は、継承されたアクセス許可
異なる継承は、派生クラスで基本クラスのメンバへのアクセスに影響を与えることができます。

1)遺伝公共
派生クラスのパブリックプロパティとして公共のすべてのメンバーの基本クラス、
派生クラスで保護されたプロパティのすべての保護されたメンバーの基本クラス、
すべてのプライベートメンバーの基本クラスは、派生クラスで使用することができません。

2)遺伝保護
、保護性の派生クラスに基本クラスのすべてのパブリックメンバのを、
保護されたグループのすべてのメンバーは、派生クラスのクラス属性に保護され、
基本クラスのすべてのプライベートメンバーは、派生クラスで使用することができません。

。3)private継承
ベースクラスのすべてのパブリックメンバーが派生クラスでprivate属性であり、
基底クラスのすべての保護されたメンバーは、派生クラスのprivate属性であり、
基底クラスのすべてのプライベートメンバーは、派生クラスで使用することはできません。

上記の分析を通じて、それを見つけることができる:
1)派生クラス継承権における基本クラスメンバへのアクセスは、指定されたよりも高くてはなりません。継承は、その後派生クラスで最高の基本クラスのメンバへのアクセスも保護され、保護されている場合、例えば、保護されたよりも高くなる保護格下げが、保護されたよりも低いがアップグレードされません。継承はパブリックである場合に再度、その後派生クラスのベースクラスメンバアクセスは同じままです。
言い換えれば、継承が公開され、保護された、プライベートBenQのは、派生クラスへのアクセスに最高クラスのメンバを参照するために使用されます。
2)にかかわらず継承の派生クラスで基本クラスのプライベートメンバーは常に)(アクセスできませんを使用するか、派生クラスのメンバ関数を呼び出すことはできません。
あなたが使用することを継承することができ、派生クラスの基底クラスのメンバーと無障害物をしたい場合は3)、その後、これらのメンバーはpublicまたはprotected宣言することができます。唯一の派生クラスのメンバを使用したくない人がプライベートとして宣言されました。

あなたは、基本クラスのメンバーはどちらも外側に、派生クラスで使用することができます(ないオブジェクトアクセスによる)が露出されていない場合、保護として4)、それが唯一宣言することができます。
私たちはここに述べた基本クラスのプライベートメンバーは、基本クラスのプライベートメンバーは継承できないことを言わなかった、派生クラスで使用することはできないことに注意してください。実際には、継承可能な基底クラス、および(メンバ変数)の民間メンバーは、それが不可能なベールを使用すること、それだけで、派生クラスでは表示されません、メモリ派生クラスのオブジェクトを取ります。この機能は、プライベートメンバー、オブジェクト指向のカプセル化を反映するために良好な隠蔽基本クラスの派生クラスを達成することが可能です。
私たちはあまり問題ではありませんアクセス制御を継承し、私は次のようにこのケースを習得信じて、この場合については、以下の統合するためのアクセス権を継承することができます。

#include <iostream>
using namespace  std;
class Parent
{
public:
  Parent(int var = -1)
  {

  }
public:
  int m_nPub;
protected:
  int m_nPtd;
private:
  int m_nPrt;
};


class Child1:public Parent
{
public:
  int getPub() {return m_nPub;}
  int getPtd() {return m_nPtd;}
  int getPrt() {return m_nPrt;}   // A  基类中的私有成员变量,所以是不能访问的
};

class Child2:protected Parent
{
public:
  int getPub() {return m_nPub;}
  int getPtd() {return m_nPtd;}
  int getPrt() {return m_nPrt;}   // B   基类中的私有成员变量,所以是不能访问的

};

class Child3:private Parent
{
public:
  int getPub() {return m_nPub;}
  int getPtd() {return m_nPtd;}
  int getPrt() {return m_nPrt;}   // C  基类中的私有成员变量,所以是不能访问的

};

int main()
{
  Child1 cd1;
  Child2 cd2;
  Child3 cd3;

  int nVar = 0;
  cd1.m_nPub = nVar;    // D  基类中的公有成员变量,以public方式继承,在类外部是可以访问的
  cd1.m_nPtd = nVar;    // E 基类中的受保护成员变量,以public方式继承,在类外部是不可以访问的。
  nVar = cd1.getPtd();  // F类中的公共的成员方法,在类外部是可以访问的。

  cd2.m_nPub = nVar;    // G 基类中的公共成员变量,以protected方式继承,在类外部是不可以访问的。
  nVar = cd2.getPtd();  // H  类中的公共的成员方法,在类外部是可以访问的。


  cd3.m_nPub = nVar;    // I 基类中的公共的成员变量,以private方式继承,在类外部是不可以访问的。
  nVar = cd3.getPtd();  // J 类中的公共的成员方法,在类外部是可以访问的。

  return 0;
}

最後に、判定方法の小さな概要がでアクセスすることができます:
1)これらの言葉は、内部のサブクラスで、外部に書かれ、呼び出し文の位置を確認するために
保護され、親クラスからプライベートどのようにサブクラスの継承(パブリックを、参照すること)2 )
3)アクセスのレベルに親クラスを参照してください(パブリック、プライベート、保護されました)

おすすめ

転載: blog.csdn.net/dxd_123456/article/details/78066895