<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

            C++ 的三種訪問權限與三種繼承方式

            時間:2024-12-27 21:14:16 C語言 我要投稿
            • 相關推薦

            C++ 的三種訪問權限與三種繼承方式

              我們知道C++中的類,有三種訪問權限(也稱作訪問控制),它們分別是public、protected、private。要理解它們其實也很容易,以下是為大家分享的C++ 的三種訪問權限與三種繼承方式,供大家參考借鑒,歡迎瀏覽!

              父類:

              class Person

              {

              public:

              Person(const string& name, int age) : m_name(name), m_age(age)

              {

              }

              void ShowInfo()

              {

              cout << "姓名:" << m_name << endl;

              cout << "年齡:" << m_age << endl;

              }

              protected:

              string m_name; //姓名

              private:

              int m_age; //年齡

              };

              class Person

              {

              public:

              Person(const string& name, int age) : m_name(name), m_age(age)

              {

              }

              void ShowInfo()

              {

              cout << "姓名:" << m_name << endl;

              cout << "年齡:" << m_age << endl;

              }

              protected:

              string m_name; //姓名

              private:

              int m_age; //年齡

              };

              子類:

              class Teacher : public Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見

              cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              class Teacher : public Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見

              cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              調用方法:

              void test()

              {

              Person person("張三", 22);

              person.ShowInfo(); //public屬性,對外部可見

              cout << person.m_name << endl; //protected屬性,對外部不可見

              cout << person.m_age << endl; //private屬性,對外部不可見

              }

              void test()

              {

              Person person("張三", 22);

              person.ShowInfo(); //public屬性,對外部可見

              cout << person.m_name << endl; //protected屬性,對外部不可見

              cout << person.m_age << endl; //private屬性,對外部不可見

              }

              總結

              我們對C++類三種方式控制權限總結如下,這與Java中的三種對應的訪問權限是一樣的。

              qq%e6%88%aa%e5%9b%be20161104113813

              三種繼承方式

              C++中繼承的方式還有多種,也分別都用public、protected、private表示。這與Java不一樣,Java只有繼承的概念,默認是public繼承的。

              1. 三種繼承方式不影響子類對父類的訪問權限,子類對父類只看父類的訪問控制權。

              如下面三種繼承方式都能訪問父類中的public和protected成員。

              class Teacher : /*public*/ /*protected*/ private Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見

              //cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              class Teacher : /*public*/ /*protected*/ private Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見

              //cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              2. 繼承方式是為了控制子類(也稱派生類)的調用方(也叫用戶)對父類(也稱基類)的訪問權限。

              public繼承

              class Teacher : public Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              class Teacher : public Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              void TestPublic()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo();

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              void TestPublic()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo();

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              結果:

              姓名:李四

              年齡:35

              姓名:李四

              年齡:35

              職稱:副教授

              private繼承:

              class Teacher : private Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              class Teacher : private Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              void TestPrivate()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo(); //錯誤,因為Teacher采用了private的繼承方式,外部不可訪問。

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              void TestPrivate()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo(); //錯誤,因為Teacher采用了private的繼承方式,外部不可訪問。

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              3. public、protected、private三種繼承方式,相當于把父類的public訪問權限在子類中變成了對應的權限。

              如protected繼承,把父類中的public成員在本類中變成了protected的訪問控制權限;private繼承,把父類的public成員和protected成員在本類中變成了private訪問控制權。

              protected繼承:

              class Teacher : protected Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              class Teacher : protected Person

              {

              public:

              Teacher(const string& name, int age, const string& title)

              : Person(name, age), m_title(title)

              {

              }

              void ShowTeacherInfo()

              {

              ShowInfo(); //正確,public屬性子類可見

              cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員

              }

              private:

              string m_title; //職稱

              };

              void TestProtected()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo(); //錯誤,基類Person的ShowInfo此時對Teacher相當于protected的,外部不可以被訪問

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              void TestProtected()

              {

              Teacher teacher("李四", 35, "副教授");

              teacher.ShowInfo(); //錯誤,基類Person的ShowInfo此時對Teacher相當于protected的,外部不可以被訪問

              cout << endl;

              teacher.ShowTeacherInfo();

              }

              class Leader : public Teacher

              {

              public:

              Leader(const string& name, int age, const string& title, string position)

              : Teacher(name, age, title), m_position(position)

              {

              }

              void ShowLeaderInfo()

              {

              ShowInfo(); //基類Person的ShowInfo此時相當于protected的,但子類仍可以訪問

              ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問

              cout << m_position << endl;

              }

              private:

              string m_position;

              };

              class Leader : public Teacher

              {

              public:

              Leader(const string& name, int age, const string& title, string position)

              : Teacher(name, age, title), m_position(position)

              {

              }

              void ShowLeaderInfo()

              {

              ShowInfo(); //基類Person的ShowInfo此時相當于protected的,但子類仍可以訪問

              ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問

              cout << m_position << endl;

              }

              private:

              string m_position;

              };


            【C++ 的三種訪問權限與三種繼承方式】相關文章:

            C語言訪問MCU寄存器的三種方式06-08

            php遞歸函數三種方式02-21

            理解Java訪問權限的控制07-22

            網絡中三種交換方式的比較02-10

            Java編程里的包及訪問權限08-14

            關于C++中定義比較函數的三種方法05-30

            路由器連接電腦的三種方式02-18

            用CSS的float創建三欄布局的三種方式03-09

            電腦無網絡訪問權限怎么辦06-02

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院