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 預設 公有繼承 基類的公有和保護乘員的訪問屬性在派生類中不變,基類的私有成員不能直接訪問 型別相容規則...