c 學習之類的繼承與派生

2021-08-09 14:19:34 字數 2780 閱讀 4632

8.3 類的繼承與派生

c++語法:定義派生類

class 派生類名 : 繼承方式1 基類1, 繼承方式2 基類2, ...

...// 派生類宣告部分

;

各新增函式成員的完整定義 // 派生類實現部分

語法說明:

 定義派生類時,在派生類名的後面新增繼承列表,在宣告部分的大括號裡宣告新增成員,在實現部分編寫各新增函

數成員的完整定義**;

 繼承列表指定派生類從哪些基類繼承。派生類可以只從乙個基類繼承(單繼承),也可以從多個基類繼承(多繼

承)。每個基類以「繼承方式 基類名」的形式宣告,多個基類之間用「,」隔開;

 派生類將繼承基類中除建構函式、析構函式之外的所有資料成員和函式成員。基類的建構函式和析構函式不能被繼

承,派生類需重新編寫自己的建構函式、析構函式。

 繼承後,派生類會對其基類成員按照繼承方式進行再次封裝。繼承方式有3種:public(公有繼承)、protected(保

護繼承)和private(私有繼承);

 public(公有繼承):派生類對其基類成員不做任何封裝,它們在派生類中的訪問許可權與原來在基類中的許可權相同;

 private(私有繼承):派生類對其基類成員做全封裝,它們在派生類中的訪問許可權統統被改為private(私有許可權),

不管它們原來在基類中的許可權是什麼。使用私有繼承,實際上是派生類要將其基類成員全部隱藏起來;

 protected(保護繼承):派生類對其基類成員做半封裝。基類中的public成員被繼承到派生類後,其訪問許可權被降

格成protected(保護許可權)。基類中的protected、private成員被繼承到派生類後,其訪問許可權保持不變;

 在類宣告部分的大括號中宣告新增的資料成員、函式成員,並指定各新增成員的訪問許可權。在類實現部分編寫各新

增函式成員的完整定義**。

同名覆蓋:派生類中定義與基類成員重名的

新增成員,新增成員將覆蓋基類成員。通過

成員名訪問時,所訪問到的將是新增成員,

這就是新增成員對基類成員的同名覆蓋。同

名覆蓋後,被覆蓋的基類成員仍然存在,只

是被隱藏了。可以訪問被覆蓋的基類成員,

其訪問形式是:基類名 :: 基類成員名

派生類物件的定義與訪問

bordercircle obj;

– 訪問公有的基類成員

obj.circle::input( )(注,同名覆蓋時訪問方法)、obj.cradius( )、obj.carea( )、obj.clen( )

– 訪問公有的新增成員

obj.w、obj.innerarea( )、obj.borderarea( )、obj.input( )

派生類物件的構造與析構

– 派生類的建構函式

派生類建構函式名( 形參列表 ) : 基類名1( 形參1 ), 基類名2( 形參2 ), ……

– 派生類物件中各資料成員的初始化順序是:先呼叫基類建構函式,

初始化基類成員;再執行派生類建構函式的函式體,初始化新增

成員 – 如果派生類繼承了多個基類,那麼各基類成員的初始化順序由其

在派生類繼承列表中的宣告順序決定,宣告在前的基類成員先初

始化派生類的析構函式

– 派生類物件中資料成員的析構順序是:先執行派生類析構函

數的函式體,清理新增成員;再呼叫基類析構函式,清理基

類成員。簡單地說,物件的析構順序與構造順序相反,即先

析構新增成員,再析構基類成員

• 組合派生類的構造與析構

– 從基類繼承來的成員(基類成員),二是新增的物件成員,

三是新增的非物件成員

– 組合派生類的建構函式需依次初始化基類成員、新增物件成

員、新增非物件成員。其中,初始化基類成員和新增物件成

員需通過初始化列表,初始化新增的非物件成員則是在函式

體中直接賦值

– 組合派生類物件中各成員的析構順序與其構造順序相反,即

先析構新增的非物件成員,再析構新增物件成員,最後才析

構基類成員

類a1

類a2

class a1

} ;class a2

} ;類b1

類b2class b1

} ;class b2

} ;組合派生類c

class c : public a1, public a2 // 繼承基類a1、a2

抽象基類減少重複**,通過繼承基類的方法重用這些**

重新定義c++語言已有運算子的運算規則,使同一運算子作用於不同型別資料時執行不同的運算,這就是運算子過載

–程式設計師可以為類過載運算子,實現類運算

–過載運算子使用函式的形式來重新定義運算子的運算規則

函式型別 operator 運算子( 形式引數 )

–將運算子函式定義為類的函式成員

–定義為類外的乙個友元函式

關係運算子「==」

bool complex :: operator ==( complex c )

complex c1(1, 3), c2(2, 4);

if (c1 == c2) // 比較c1、c2是否相等

// ...... **省略

C 繼承與派生 學習筆記

一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...

C 繼承與派生 學習筆記

一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...

C 繼承與派生

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