繼承和派生
一.繼承(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指向整形常量的常指標,指標指向和指標指向的值均不可改...