奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

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

時間:2024-06-07 22:22:59 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

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

網絡中三種交換方式的比較08-24

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

路由器連接電腦的三種方式和設置介紹06-01

有關用三種方式表示二次函數的教學教案09-26

十三種外貿報關術語介紹09-29

無線連接后顯示有限訪問權限解決方法07-19

Word導入Excel的三種技巧07-09

C語言三種循環語句04-28

主站蜘蛛池模板: 湘潭市| 龙海市| 枣强县| 岗巴县| 华容县| 临猗县| 顺平县| 宜春市| 扶绥县| 曲麻莱县| 栾川县| 城口县| 扶风县| 屏东市| 民县| 三亚市| 临澧县| 屏南县| 石台县| 北宁市| 塘沽区| 乌苏市| 门源| 尖扎县| 哈巴河县| 通海县| 当雄县| 乡城县| 南城县| 岱山县| 张家口市| 宁强县| 绥宁县| 岳西县| 都安| 南宁市| 阳泉市| 蒲江县| 启东市| 疏附县| 平舆县|