異なる継承方法

10563 ワード


  • 無視された細部
  •   (:)      ,Parent       ,public      ?
    class Parent
    {
     
    };
    class Child :public Parent
    {
     
    };

  • 興味深い質問:継承中のpublicをprotectedまたはprivateに変更できますか?もしよろしければ、public継承と何の違いがありますか?

  • 答:はい!

  • C++では3つの異なる継承方式がサポートされています
  • public  :                   
    private  :                
    protected   :              ,       

    継承方法/親メンバーのアクセスレベル
    public
    protected
    private
    public
    public
    protected
    private
    protected
    protected
    protected
    private
    private
    private
    private
    private
     
     
     
     
     
     
     

  • C++のデフォルトの継承方法はprivateです!

  • 事実

  • 一般的に、C++プロジェクトはpublic継承のみを使用します.

  • C++の派生言語は1つの継承方式のみをサポートする(public継承)

  • protectedとprivate継承による複雑さは実用性よりはるかに大きい

  • じっけん
  •  1 #include 
     2 #include <string>
     3 using namespace std;
     4 class Parent
     5 {
     6 protected:
     7     int m_a;
     8 protected:
     9     int m_b;
    10 public:
    11     int m_c;
    12     void set(int a, int b, int c)
    13     {
    14         m_a = a;
    15         m_b = b;
    16         m_c = c;
    17     }
    18 };
    19 class Child_A : public Parent
    20 {
    21 public:
    22     void print()
    23     {
    24         cout << "m_a" << m_a << endl;
    25         cout << "m_b" << m_b << endl;
    26         cout << "m_c" << m_c << endl;
    27     }
    28 };
    29 class Child_B : protected Parent
    30 {
    31 public:
    32     void print()
    33     {
    34         cout << "m_a" << m_a << endl;
    35         cout << "m_b" << m_b << endl;
    36         cout << "m_c" << m_c << endl;
    37     }
    38 };
    39 class Child_C : private Parent
    40 {
    41 public:
    42     void print()
    43     {
    44         cout << "m_a" << m_a << endl;
    45         cout << "m_b" << m_b << endl;
    46         cout << "m_c" << m_c << endl;
    47     }
    48 };
    49 int main()
    50 {
    51     Child_A a;
    52     Child_B b;
    53     Child_C c;
    54     a.m_c = 100;       
    55     // b.m_c = 100;    // Child_B       Parent,       public          protected   ,         
    56     // c.m_c = 100;    // Child_C       Parent,              private   ,         
    57     a.set(1, 1, 1);
    58     // b.set(2, 2, 2);
    59     // c.set(3, 3, 3);
    60     a.print();
    61     b.print();
    62     c.print();
    63     return 0;
    64 }

  • 実行結果

  • m_a1
    m_b1
    m_c1
    m_a-858993460
    m_b-858993460
    m_c-858993460
    m_a-858993460
    m_b-858993460
    m_c-858993460

  • まとめ:

  • C++では3つの異なる継承方式がサポートされています

  • 継承プロパティは、子クラスの親メンバーのアクセスプロパティに直接影響します.

  • 一般に,工事ではpublicの継承方式のみが用いられる.

  • C++の派生言語はpublic継承方式のみをサポートする

  •