類繼承意味著從基類派生出新的類,新的類包含基類的資料和方法,並增加了自己的資料和方法。
class baseplus: public base
需要繼承類特性加入派生類的建構函式、資料成員和方法。
建立派生類物件前,必須建立基類物件,通常採用初始化列表進行賦值。與此對應,派生類析構函式先執行然後基類析構函式執行。
baseplus::baseplus(int a, int b, intc):base(a,b)
//或者
baseplus::baseplus(int c, cosnt base & a1):base(a1)
除非呼叫基類預設建構函式,否則應該顯示呼叫建構函式。
由於派生類也屬於基類,因此基類引用、指標不需要轉換,可指向基類物件、派生類物件,從而可以呼叫基類方法。基類引用、指標通常可以與虛函式結合使用,從而方便管理,使得呼叫方法根據物件型別自動確定呼叫方法。
虛方法使得派生類可以對基類方法重定義,前提是二者的函式形式必須相同(比如不能乙個形參為int,乙個沒有形參)
例如:
class base
class baseplus: public base
此時,基類引用、指標可以靈活動態確定呼叫哪乙個的方法
base a(init);
baseplus b(init);
base & a1 = a;
base & b1 = b;
a1.test();//呼叫base的test方法
b1.test();//呼叫baseplus的test方法
這個方法的實現依賴於(1)虛函式、(2)指標或引用。按值傳遞的不存在這個方法,全都轉換為基類方法。
如上所述,虛函式可以實現派生類的重定義,需要注意的是虛函式的宣告需要用關鍵字virtual,方法的實現不需要virtual關鍵字。
析構函式預設應設定為虛函式。
使用虛函式時,(1)空間消耗:儲存位址空間;(2)要執行建立表、查詢表的操作。優點是比較靈活,可以重定義方法。
編譯器對非虛方法實行靜態聯編,對虛方法實行動態聯編(執行時再確定執行哪個)
派生類方法可以使用基類方法,必須使用作用域解析符 :: 。
void baseplus::test() const
對於外界來說,其功能相當於private;
對於派生類來說,其功能相當於public,可以訪問private成員。
抽象基類可以派生出不同的類。
c++使用純虛函式提供未實現函式,純虛函式宣告結尾為0,。
當類宣告包含純虛函式時,不能建立該類物件。包含純虛函式的類只能用作基類。
class b
根據以前知識,若類中使用new動態分配記憶體,則預設複製建構函式不適用。假定基類使用new動態分配記憶體,則基類中包含析構函式、複製建構函式和過載複製運算子,但是派生類如果沒有使用new,派生類不需要定義顯示析構函式、複製建構函式和賦值運算子。
在此情況下,必須為派生類定義顯示析構函式、複製建構函式和賦值運算子。
例如:
class baseplus:: public base
;
相應的析構函式:
basplus::~baseplus()
複製建構函式:
baseplus::baseplus(const baseolus &r)
賦值運算子:
baseplus & baseplus::operator=(const baseplus & r)
總之,當基類和派生類都採用動態分配記憶體時,派生類的建構函式、複製建構函式、複製運算子都必須採用基類的三者來處理基類部分。析構函式:自動完成;建構函式,派生類的建構函式要使用基類的複製建構函式;賦值運算子,採用作用域解析運算子顯示呼叫,如base::operator=® c primer plus學習筆記
1.變數名命名規則 重要的 1 有含義 2 只能用字母字元 數字和下劃線 3 第乙個字元不能是數字 4 區分大小寫 5 不能用c 關鍵字 2.整型 1 無符合型別不能表負值 2 char short 16 int short long 32,int 和longlong 64,long c 11 寬度...
C PrimerPlus學習筆記
if語句中判斷恒等,將常量放前,防止由於 寫成 造成的難以查詢的bug。if 0 count 若寫成 0 count 會報錯,count 0 則不會命名空間 using namespace std cout one cout two std cout one std cout two using s...
C Primer Plus學習筆記
1.組合語言是特地的cpu設計所採用的一組內部指令的助記符,不同的cpu型別使用不同的cpu c給予你更多的自由,也讓你承擔更多的風險 自由的代價是永遠的警惕 2.目標 檔案 可執行檔案和庫 3.可以用畫幾個盒子的方式來跟蹤乙個程式的變數 一門語言的語法就是一套規則,用於管理這種語言中的合法語句組織...