[C++_7]繼承_1

13 繼承

13.1 繼承與訪問權限

繼承方式對子類內部沒啥影響,對外界有影響



父類公開成員

父類保護成員

父類私有成員

公開繼承

子類內部

可訪問(公開屬性)

可訪問(保護屬性)

不可訪問

外界

可訪問

不可訪問

不可訪問

私有繼承

子類內部

可訪問(私有屬性)

可訪問(私有屬性)

不可訪問

外界

不可訪問

不可訪問

不可訪問

保護繼承

子類內部

可訪問(保護屬性)

可訪問(保護屬性)

不可訪問

外界

不可訪問

不可訪問

不可訪問



13.2 派生類初始化

一般依照誰的成員誰維護,在初始化列表中把相應的參數傳到父類構造函數中。
 

Teacher(const char*name,bool gender,const char* course)//括號內包括基類所需的參數和子員變量
 :Person(name,gender),course(course) //前面的括號裏是實參,可以是子類構造函數總參數表中的參數,也可以使常量和全局變量


13.3 子類同名函數覆蓋

子類可以改寫來自父類的成員函數,這樣把父類的同名成員函數隱藏起來 ,只要同名就會隱藏,與參數表,返回類型無關。

如果想訪問父類的同名函數,b.Person::show();

#include<iostream>
#include<string>

using namespace std;

typedef unsigned int unint ;
  enum gender{F,M};
  
class Person
{
protected: 
  string m_name;
  unint m_age;
  gender m_g;
public:
  Person(string name,unint age,gender sex):m_name(name),m_age(age),m_g(sex){};
  void showme(){cout<<"我叫"<< m_name<<"今年"<< m_age<<"歲, "<<"是個"<<string(m_g==F?"帥鍋":"美呂")<<endl;};  
};

class Teacher:public Person
{
  string m_course;
public:
  Teacher(string name,unint age,gender sex,string course);
  void showme();
};

Teacher::Teacher(string name,unint age,gender sex,string course):Person(name,age,sex),m_course(course)
{};

void Teacher::showme()
{
  cout<<"我叫"<< m_name<<"今年"<< m_age<<"歲, "
  <<"是個"<<string(m_g==F?"帥鍋, ":"美呂, ")<<"還是個教"<< m_course<<"的老師。"
  <<endl;
}

int main()
{
  Person p("小明",18,F);
  Teacher t("小紅",28,M,"數學");
  cout << "父類對象調用父類函數:"<<endl;
  p.showme();
  cout << "子類對象調用子類對象:"<<endl;
  t.showme();
  cout << "子類對象調用父類函數:"<<endl;
  t.Person::showme();
  return 0;
}

輸出結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章