繼承

繼承:繼承是指一個對象直接使用另一對象的屬性和方法。(繼承是一種複用手段,共享公有的東西,實現各自不同的東西

類的繼承:新類(派生類/子類)從已有類(基類/父類)得到已有的特性。

理解:派生類不僅具有基類的屬性,還有自己特有的屬性。


繼承方式和成員訪問限定符 

從基類繼承來的成員在派生類的訪問屬性是由繼承方式控制的。

類的繼承方式: public(公有繼承) protected(保護繼承)  private(私有繼承)

公有繼承時,基類的非私有成員在子類的訪問屬性都不變。

保護繼承時,基類的非私有成員在子類的保護成員。

私有繼承時,基類的非私有成員在子類的私有成員。

成員訪問限定符也有三: public(公有) protected(保護)  private(私有)

public: 訪問不受限制

protected:訪問範圍限定於它所屬的類或該類的派生類。

private訪問範圍限定於它所屬的類。

class Person//基類
{
public :   
	void Display ()
	{ 
		cout<<_name <<endl;
	}
protected : 
	string _name ;   // 姓名
	int age;
};
class Student : <span style="background-color: rgb(255, 204, 204);">public</span> Person //學生類繼承了父類的_name和age,就不需要再次定義
{
protected : 
	int _num1 ;   // 學號 是學生類特有的屬性
};
class Teacher:public Person
{
protected:
	int _num2;   //工號   是教師類特有的屬性

賦值兼容規則

1. 子類對象可以賦值給父類對象 

2. 父類對象不能賦值給子類對象

 3. 父類的指針/引用可以指向子類對象 

4. 子類的指針/引用不能指向父類對

理解:子類有父類的屬性,但父類不一定有子類的屬性。學生一定是人,但人不一定是學生。

如果在子類定義了一個成員變量與父類相同(子類成員覆蓋了父類成員/重定義),則子類將訪問子類中的成員。如果我想要訪問父類的成員,則 “ 基類::基類成員   ” 訪問。

單繼承和多繼承


菱形繼承

 class Person {
 public :  
   string _name ;  <span style="font-family: arial, sans-serif;"> // 姓名</span>
<span style="font-family: arial, sans-serif;"> };</span>
class Student : public Person 
{
 protected :    
 int _num ;   //學號 
};
class Teacher : public Person 
{ protected :   
  int _id ;     // 工號 };
class Assistant : public Student, public Teacher
 {
 protected :    
 string _majorCourse ;     // 主修課程
 };


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