十六 C 繼承與派生

2021-10-13 09:57:43 字數 3596 閱讀 2087

繼承:減少**重複內容。c++通過繼承機制可以利用已有的資料型別來定義新的資料型別,新的類不僅擁有舊類的成員,還擁有新定義的成員。

乙個b類繼承於a類,或稱從a類派生類b。這樣的話,類a成為基類,類b成為派生類。

派生類的成員,包含兩大部分:

;//公有繼承

class son1 :public base1

};void myfunc()

/// /保護繼承///

class base2

;class son2 :protected base2

};void myfunc1()

/// /保護繼承///

class base3

;class son3 :private base3

};class grandson3 :public son3

;//子類中 會繼承父類的私有成員 ,只是被編譯器給隱藏起來,訪問不到私有成員

class son :public base

;void test01()

int main()

子類物件在建立時會首先呼叫父類中的建構函式

父類建構函式執行完畢後,才會呼叫子類的建構函式

當父類建構函式有引數時,需要在子類初始化列表中顯示呼叫父類建構函式

析構函式呼叫順序和建構函式相反

**例項:

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#includeclass base

~base() };

//子類會繼承父類成員屬性,成員函式

//但是 子類不會繼承 父類建構函式和析構函式

//只有父類自己知道如何構造和析構自己的屬性,而子類不知道

class son :public base

~son() };

void test01()

class base2

int m_a;

};//如果父類中沒有合適的預設構造,那麼子類可以利用初始化列表的方式顯示呼叫父類的其他構造

class son2 :public base2

};void test02()

int main()

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#includeclass base

void fun()

int m_a;

};class son :public base

void fun()

int m_a;

};void test01()

//如果子類和父類擁有同名的函式屬性 子類會覆蓋父類的成員嗎? 不會

//如果子類與父類的成員函式名稱相同,子類會把父類的所有同名版本都隱藏掉

//想呼叫父類的方法,必須加作用域

int main()

靜態成員函式和非靜態成員函式都可以被繼承到派生類中,但靜態成員函式不能是虛函式。

**:

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#includeclass base

static void func(int a)

static int m_a;

};int base::m_a = 10;

class son :public base

static void func(int a)

static int m_a;

};int son::m_a = 20;

//靜態成員屬性 子類可以繼承下來

void test01()

int main()

我們可以從乙個類繼承,我們也可以能同時從多個類繼承,這就是多繼承。但是由於多繼承是非常受爭議的,從多個類繼承可能會導致函式、變數等同名導致較多的歧義。

//不建議使用多繼承

int main()

兩個派生類繼承同乙個基類而又有某個類同時繼承者兩個派生類,這種繼承被稱為菱形繼承

問題:

對於重複繼承問題,c++提供了虛基類來解決。

**例項:

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#includeclass animal

;//class sheep : public animal

//虛基類sheep

class sheep:virtual public animal //虛繼承

;//class tuo :public animal

//虛基類 tuo

class tuo :virtual public animal

;class sheeptuo :public sheep, public tuo

;//菱形問題的解決方案 利用虛繼承

void test01()

int main()

C 繼承與派生

派生新類 吸收已有類的成員 調整已有類成員和新增新的成員 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,派生類成員宣告 繼承方式有 public protected private 預設 公有繼承 基類的公有和保護乘員的訪問屬性在派生類中不變,基類的私有成員不能直接訪問 型別相容規則...

c 繼承與派生

繼承 與派生 一 派生方式的不同的表現 1 派生類在類內成員對基類成員 的訪問許可權 2 派生類的物件對基類成員的訪問許可權。二 公有繼承 1 基類protected和public的成員在派生類中訪問屬性保持不變 2 基類的private成員在派生類中不可訪問。3 派生類的成員 即派生類內 可以直接...

c 繼承與派生

一 基本概念 1 類的繼承,是新的類從已有類那裡得到已有的特性。或從已有類產生新類的過程就是類的派生。原有的類稱為基類或父類,產生的新類稱為派生類或子類。2 派生類的宣告 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,繼承方式 基類名n 3 乙個派生類可以同時有多個基類,這種情況稱為...