總結c 之繼承和派生

2021-12-22 10:31:13 字數 2388 閱讀 4867

繼承和派生

一.繼承(inheritance):在乙個已存在的類的基礎上建立乙個新的類。在c++中可重用性是通過繼承這一機制實現的。

派生(derived):在已有類的基礎上新增自己的特性而產生新類的過程。共享基類的成員。派生類不會繼承基類的友元關係。派生類同時也是乙個

組合:建立乙個新類,類中的乙個或者多個物件是其他類的成員。

被繼承的類稱為基類(base class),派生出的類稱為派生類(derived class)。

乙個派生類可以從乙個基類派生,稱之為單繼承。也可以從多個基類派生,稱之為多繼承。

派生過程基類不會作出改變。派生類則除了繼承基類所有可引用的成員外,還可以另外定義新的成員。

繼承首先是**重用的一種機制,但另乙個重要的特性在於:繼承描述了一組類,這組類在乙個相關聯的層次上,乙個類可以看作是另乙個類。

2.繼承的目的:實現**重用。通過繼承機制,可以利用已有的資料型別來定義新的資料型別。

派生的目的:當新的問題出現,原有程式無法解決時,對原有程式進行改造。

3.派生類的宣告

class 派生類名:繼承方式基類名

{派生類新增加的成員宣告;

}派生類一部分是從基類繼承的成員,一部分是在宣告派生類時新增加的部分。

4.派生生成過程。

1.吸收基類成員:吸收除建構函式和析構函式外的資料。

2.改造基類成員:宣告乙個和基類成員同名的新成員,派生類中的新成員就遮蔽了基類同名成員稱之為同名覆蓋。

這裡的遮蔽或者覆蓋並不是真正意義上的覆蓋,依然可以通過基類名加作用域操作符(::)進行訪問。

3.發展新成員:派生類新增加的成員。新增加的成員需與基類成員不同命。

4.重寫建構函式和析構函式:被重新定義的基類函式是虛函式,則稱派生類中同名函式為重寫。派生類不會繼承基類的建構函式和析構函式。

5.繼承方式:繼承方式不同影響派生類成員對基類成員訪問許可權。

access(公有繼承):派生類繼承基類的public和protected且訪問屬性不變。基類的private不繼承。

access(私有繼承):派生類繼承基類的public和protected成員,但是訪問勸降都變成private。基類的private不繼承。

access(保護繼承):派生類繼承基類的public和protected,但訪問許可權都變成protected。基類的private不繼承。

protected成員對派生類的成員而言是公開成員,在類外它修飾的成員則是私有的不能訪問。

4.所有繼承方式基類的private都不會被繼承。

6.建構函式和析構函式

1.建構函式

1>派生類在宣告建構函式時只需對新增的成員進行初始化,繼承而來的成員通過基類建構函式初始化。

2>派生類的建構函式需要給基類的建構函式傳遞引數。宣告格式如下:

派生類名::派生類名():繼承方式基類名(參數列)

3>當基類宣告有帶形參的建構函式時,派生類需要定義建構函式並對基類的建構函式傳遞引數。

4>建構函式和析構函式都不能重寫。父類的被隱藏,呼叫時需要加上父類名+作用域操作符(::)。

5>派生類被呼叫時會先呼叫基類的乙個建構函式,再呼叫派生類。

6>多繼承宣告方式

派生類名::派生類名():基類名1(參數列) 基類名2(參數列)。。。

2.析構函式:先呼叫派生類的析構函式再呼叫基類的析構函式。

7.抽象類

當定義乙個類只能用作基類來派生出新的類,而不能用來定義物件。

將類的建構函式和析構函式的訪問許可權定義為protected時,這種類稱為抽象類。

將類中的建構函式和析構函式說明為私有時,所定義的類通常是沒有意義。不能用它來產生物件,也不能用它來產生派生類。

8.多重繼承的二義性。

當派生類中含有和基類同名的成員時存在二義性。

任意基類在派生類中只能繼承一次,否則會造成成員名的衝突。這裡就需要引入虛基繼承的概念,也就是在繼承方式前面加上virtual,以避免二義性。二義性也就是繼承的兩個基類中有相同的資料或函式,在呼叫時需加上(基類名+作用域操作符(::

))加以區別。

9.引用和指標

設a為基類,b為派生類

b b;

a *p = &b;可以通過p訪問a中原有的資料成員,不能訪問b中新增加的成員

a &r = b; 可以通過r訪問a中原有的資料成員,不能訪問b中新增加的成員。

10.繼承與組合

在a類中以b類的物件作為成員變數稱之為組合。

組合是,一般在a類的建構函式初始化列表中要初始化b類(會呼叫b的乙個建構函式).

11.基類和派生類之間物件的賦值:派生類可以賦值給基類,基類不能賦值給派生類。

12.小結:繼承和組合都允許由已存在的型別建立新型別。

如果想重用已有類的內部實現的話,最好用組合;如果想重用已有類的介面的話,就應使用繼承

繼承描述的類之間的層次關係是多型的前提

c和c 中const用法總結

const型別定義 指明變數或物件的值是不能被更新,引入目的是為了取代預編譯指令 常量必須被初始化 cons的作用 1 可以定義const常量例如 constintmax 100 intarray max 2 便於進行型別檢查例如 voidf constinti 編譯器就會知道i是乙個常量,不允許修...

C和C 中const的用法異同總結

c中const的用法總結起來主要分為以下兩種 1 在定義變數時使用 由於const常量在定義後不能被修改,所以在定義時一定要進行初始化操作 a 最簡單的用法,說明變數為乙個常變數 在以下例子裡,int 和const的先後順序可以改變的,這無所謂 const int a 100 int const b...

C和指標關鍵點總結

指標常量與常量指標 int p 指向普通整形指標 intconst p 指向整形常量的指標,指標指向可以改變,但指標指向的值不能改變。int const p指向整形的常指標,指標指向不能改變,但指標指向的值可以改變。intconst const p指向整形常量的常指標,指標指向和指標指向的值均不可改...