基類的建構函式不能被繼承,在宣告派生類時,對繼承過來的成員變數的初始化工作也要由派生類的建構函式來完成。所以在設計派生類的建構函式時,不僅要考慮派生類新增的成員變數,還要考慮基類的成員變數,要讓它們都被初始化。
解決這個問題的思路是:在執行派生類的建構函式時,呼叫基類的建構函式。
下面的例子展示了如何在派生類的建構函式中呼叫基類的建構函式。
#include
using namespace std;
//基類
class people;
people::people(char *name, int age): name(name), age(age){}
//派生類
class student: public people;
//呼叫了基類的建構函式
student::student(char *name, int age, float score): people(name, age)
void student::display();
people::people()
people::people(char *name, int age): name(name), age(age){}
//派生類
class student: public people;
student::student()
student::student(char *name, int age, float score): people(name, age)
void student::display();
people::people(): name("***"), age(0){
cout<<"people::people()"< b --> c
那麼則建立c類物件時,建構函式的執行順序為:
a類建構函式 --> b類建構函式 --> c類建構函式
建構函式的呼叫順序是按照繼承的層次自頂向下、從基類再到派生類的。
C 基類和派生類的建構函式
前面我們說基類的成員函式可以被繼承,可以通過派生類的物件訪問,但這僅僅指的是普通的成員函式,類的建構函式不能被繼承。建構函式不能被繼承是有道理的,因為即使繼承了,它的名字和派生類的名字也不一樣,不能成為派生類的建構函式,當然更不能成為普通的成員函式。在設計派生類時,對繼承過來的成員變數的初始化工作也...
基類與派生類的建構函式
一 預設建構函式的呼叫關係 通過下面的例子,我們來看一下基類與派生的建構函式的呼叫順序。建立時先基類後派生類。銷毀時先派生類後基類。include include using namespace std class cbase cbase class cderive public cbase cde...
C 基類和派生類的建構函式(詳解)
基類的成員函式可以被繼承,可以通過派生類的物件訪問,但這僅僅指的是普通的成員函式,類的建構函式不能被繼承。建構函式不能被繼承是有道理的,因為即使繼承了,它的名字和派生類的名字也不一樣,不能成為派生類的建構函式,當然更不能成為普通的成員函式。在設計派生類時,對繼承過來的成員變數的初始化工作也要由派生類...