c 筆記(七)侯捷老師課程 虛函式與多型

2021-09-25 05:53:34 字數 1695 閱讀 5418

在任何乙個成員函式之前加上virtual

子類可以呼叫父類的函式,繼承的是呼叫權

(1)非虛函式(non-virtual):你不希望子類重新定義(override,複寫)它。

(2)虛函式(virtual):你希望子類重新定義它,且它已有預設定義。

(3)純虛函式(pure virtual):你希望子類一定要重新定義它,你對他沒有預設定義。

1.shape是乙個很抽象的概念,是形狀,接著三角形,正方形可以繼承shape類

2.objectid為非虛函式

3. error 為 虛函式,操作失敗,可以丟出乙個錯誤**,例如顯示:(三角形/正方形)設計錯誤!

子類可以重新定義這段**

哪一種形狀出錯,自然可以呼叫哪一種形狀的error函式

4.draw 為 純虛函式,一定要被所有子類重新定義。

因為父類是shape,根本不知道怎麼定義。

開啟選單,彈出對話方塊,輸入或選擇檔名,程式收到檔名並檢查檔名是否合理,查詢檔案,開啟檔案,開啟之後讀出來,只有讀取的內容是不同的,其他的操作都可以事先寫好,讓後面的人用。

類中的成員函式都是以this為呼叫的,所以this->serialize()在以cmydoc的物件呼叫以後,傳入的是mydoc的位址,最後呼叫了其函式,實現了具體實現

template method就是一種寫好乙個框架把可以設定的都設定好,然後再實現過程中以虛函式的方式讓具體實現交由繼承它的類,完成各種不同的功能。

灰色的線表示函式的執行過程。

二、繼承+復合下的構造和析構函式 

1.子類裡有父類的成分,又有component

當你建立子類時,建構函式應該先呼叫父類,再呼叫component,最後是子類

析構函式相反

2.子類有父類的成分,父類中有component的成分,

建構函式次序:component,base,derived

析構函式相反

三、委託+繼承    

栗子:對於同一份檔案,有多種view,儲存檔案和表現檔案這兩個class呈現怎樣的關聯呢?

subject (存放資料)

observer(觀察資料)

目的:讓subject可以擁有很多個observer

準備乙個向量容器存放指標,指向observer,而observer作為乙個父類,可以派生出很多子類,子類都是一種observer,子類都可以放入容器中

class subject

void set_value(const int& value)

void notify()

}

class observer;

侯捷老師C 基礎課程筆記1 2

基於物件 object based 與物件導向 object oriented 的區別 通常 基於物件 使用物件,但無法利用現有的物件模版產生新的物件型別,繼而產生新的物件。即 基於物件 只有封裝,沒有繼承和多型的特點。物件導向 具有 封裝 繼承 多型 三大特點,缺一不可。版本c 98 是c 1.0...

C 11新特性 侯捷 課程筆記 二

本部分包括的內容為variadic templates 可變模板引數 這部分似乎是個概述,我看到後面有好幾節課也是這個主題。void print template 這裡的.是關鍵字的一部分 void print const t firstarg,const types args 這裡的.要寫在自定義...

1 C 侯捷老師課程 拷貝複製 拷貝構造 析構

有兩個經典的類 complex 複數 string 前者不含指標 內部資料為兩個double值,分別代表實部和虛部 後者含有指標。下面為complex,其中3 5行是complex類的建構函式。這一類不含指標的類不含拷貝構造 拷貝複製 析構函式。class complex complex opera...