初識C 繼承

2021-09-09 01:57:32 字數 1758 閱讀 5833

先是自己憑藉自己在課堂上的記憶打了一遍。自然出了錯誤。

//編譯錯誤

#include #include using namespace std;

class people;};

class student : public people

;

void display();

};void student::display()

int main()

錯誤小結:

1.類student是public繼承於類people,那麼在student的成員函式中,無法訪問父類的private和protected屬性的成員,只能通過繼承過來的父類的成員函式訪問它們。

2.初始化列表寫錯了。函式的預設引數最後一句 string bname; 應該是 string bname = "";

改了之後,可以執行了。

學習到的知識點:

1.對於父類的派生類來說,其物件的初始化需要利用初始化列表進行操作。比如:

student(string bname, int bnum = 0, int bscore = 0, int bage = 0, int b*** = 0)

:people(bage, b***),num(bnum),score(bscore);

上面的語句呼叫了父類的初始化建構函式,所以父類的建構函式應具有含參建構函式,可以利用過載來實現。

個人的習慣是:寫乙個含有預設引數的初始化列表。

2.如果是public繼承,那麼在派生類的成員函式中無法訪問其從父類繼承過來的具有private和protected屬性的成員。

這個時候,可以通過呼叫從父類繼承過來的成員函式獲取其值。例如:

int people::getage()

int people::get***()

···void student::display()

3.複習了一下含有預設引數的建構函式,設定預設引數時應從右向左。例如:

student(int bnum = 0, int bscore = 0, int bage = 0, int b*** = 0, string bname):people(bage, b***) //錯誤

應為:student(int bnum = 0, int bscore = 0, int bage = 0, int b*** = 0, string bname = ""):people(bage, b***)

C 之封裝 繼承 多型初識

封裝就是把一些具體的功能實現寫在乙個檔案內,留給外部乙個介面,呼叫者通過介面呼叫方法,實現功能。繼承就是子類繼承父類的所有屬性和方法,然後在新增自己的屬性跟該方法。多型是父類有的方法,子類過載時呼叫自己的方法,或者是父類指標指向子類物件時,呼叫方法,如果子類有過載就呼叫子類的,如果沒有就呼叫父類的。...

初識繼承和多型

1.繼承 乙個類可以使用另乙個類的方法和屬性 成員 2.子類繼承父類使用的符號是冒號 3.子類不能繼承父類的建構函式 4.呼叫子類構造的時候,沒有使用base關鍵字呼叫父類的指定的構造,預設呼叫父類的無參構造 5.base關鍵字 base.父類的屬性 base.父類的方法 base.父類的成員 ba...

初識 Java 03 繼承

繼承 在父類和子類之間同時存在著繼承和擴充套件關係。子類繼承了父類的屬性和方法,同時子類中還可以擴充套件出新的屬性和方法,並且還可以覆蓋父類中方法的實現方式。覆蓋是專用術語,指在子類中重新實現父類中的方法。確切的說,子類不能繼承父類中用private修飾的屬性和方法。從每個物件都是服務提供者的角度來...