<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C++ 的三種訪問權限與三種繼承方式

    時間:2026-01-01 18:01:30 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; /pic/p>

      private:

      int m_age; /pic/p>

      };

      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; /pic/p>

      private:

      int m_age; /pic/p>

      };

      子類:

      class Teacher : public Person

      {

      public:

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

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

      {

      }

      void ShowTeacherInfo()

      {

      ShowInfo(); /pic/p>

      cout << "姓名:" << m_name << endl; /pic/p>

      cout << "年齡:" << m_age << endl; /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      class Teacher : public Person

      {

      public:

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

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

      {

      }

      void ShowTeacherInfo()

      {

      ShowInfo(); /pic/p>

      cout << "姓名:" << m_name << endl; /pic/p>

      cout << "年齡:" << m_age << endl; /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      調用方法:

      void test()

      {

      Person person("張三", 22);

      person.ShowInfo(); /pic/p>

      cout << person.m_name << endl; /pic/p>

      cout << person.m_age << endl; /pic/p>

      }

      void test()

      {

      Person person("張三", 22);

      person.ShowInfo(); /pic/p>

      cout << person.m_name << endl; /pic/p>

      cout << person.m_age << endl; /pic/p>

      }

      總結

      我們對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(); /pic/p>

      cout << "姓名:" << m_name << endl; /pic/p>

      /pic/pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      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(); /pic/p>

      cout << "姓名:" << m_name << endl; /pic/p>

      /pic/pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      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(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      class Teacher : public Person

      {

      public:

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

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

      {

      }

      void ShowTeacherInfo()

      {

      ShowInfo(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      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(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      class Teacher : private Person

      {

      public:

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

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

      {

      }

      void ShowTeacherInfo()

      {

      ShowInfo(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      void TestPrivate()

      {

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

      teacher.ShowInfo(); /pic/p>

      cout << endl;

      teacher.ShowTeacherInfo();

      }

      void TestPrivate()

      {

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

      teacher.ShowInfo(); /pic/p>

      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(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      class Teacher : protected Person

      {

      public:

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

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

      {

      }

      void ShowTeacherInfo()

      {

      ShowInfo(); /pic/p>

      cout << "職稱:" << m_title << endl; /pic/p>

      }

      private:

      string m_title; /pic/p>

      };

      void TestProtected()

      {

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

      teacher.ShowInfo(); /pic/p>

      cout << endl;

      teacher.ShowTeacherInfo();

      }

      void TestProtected()

      {

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

      teacher.ShowInfo(); /pic/p>

      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(); /pic/p>

      ShowTeacherInfo(); /pic/p>

      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(); /pic/p>

      ShowTeacherInfo(); /pic/p>

      cout << m_position << endl;

      }

      private:

      string m_position;

      };


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

    C語言訪問MCU寄存器的三種方式07-26

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

    理解Java訪問權限的控制12-18

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

    Java編程里的包及訪問權限01-07

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

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

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

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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人