三、多層繼承的派生類
1.多層繼承的派生類只需在構造函數的初始化列表中寫出直接基類的構造函數即可
1 class student 2 { 3 public: 4 student(int n, string nam) 5 { 6 num = n; name = nam; 7 } 8 }; 9 class student1 : public student 10 { 11 public: 12 student1(int n, string nam, int a) :student(n, nam) {age = a;} 13 }; 14 class student2 : public student1 15 { 16 public: 17 student2(int n, string nam, int a, int s) :student1(n, nam, a) {score = s;} 18 };
基類:student(int n, string nam)
一級派生: student1 ( int n, string nam, int a ):student (n,nam)
二級派生:student2 ( int n, string nam, int a, int s ): student1 (n,nam,a)
2.注意!!不要寫成:
student2 ( int n, string nam, int a, int s ): student (n, nam), student1(n, nam, a)//錯誤!!!
四、派生類的構造函數總結
1.student(所有的形參表寫在這里):這里能寫的東西只有(1)基類構造函數(2)內嵌對象的初始化列表(3)該類的新增數據成員{函數體里能寫的東西有(1)基類中能在派生類中訪問的數據的賦值(2)派生類新增數據成員的賦值(3)其他想加的語句}
2.在初始化列表中的執行順序為(1)直接基類構造函數(如果沒有顯式寫出的話,系統會自動調用一個無參構造函數)(2)內嵌對象對應的類的構造函數(具體調用哪一個取決於對象的參數形式)(3)其他語句
3.從本質上來講,構造函數的作用在於初始化該類中的數據成員,但是達到同樣的目的的方法有很多,比如我可以在類中寫一個函數,給數據成員賦值;但是,最簡單和可靠的方式還是調用構造函數,所有構造函數最終是要將所有的數據成員都初始化。(對於有些被繼承了之后訪問不了的數據成員怎么辦?)