VC 深入詳解之C 筆記

2021-05-23 22:06:17 字數 2120 閱讀 3416

類的繼承

假設有乙個動物類,他們都有呼吸,睡覺,吃飯

繼承起來就是這樣子的:

class animal

~animal()

void eat()

void sleep()

void breathe() };

下面定義一條魚:

class animal :public animal

~fish()

};這樣魚就繼承了

animal

的eat

、breath

、sleep

方法,並且可以通過

main

函式檢視父類和子類的建立和析構順序。

類中唯讀變數的初始化

class point

;子類初始化父類的帶參建構函式

class animal

~animal()

void eat()

void sleep()

void breathe() };

下面定義一條魚:

class animal :public animal

~fish()

};類的繼承與類的成員的訪問特性

public

定義的成員可以在任何地方被訪問

protected

定義的成員只能在該類和其子類中訪問

private

定義的成員只能在該類自身中訪問

類的繼承時一般定義為

public

繼承,比如上面的魚繼承動物。而類預設為

private

繼承,就是父類的成員在子類中都變成了

private

型別的訪問許可權。如果以

protected

的方式則基類中的

public

和protected

成員在派生類中都變成了

protected

型別的訪問許可權。

多重繼承問題

乙個類可以從多個基類中派生。在派生類由多個基類派生的多重繼承模式中,基類是用基類表語法成分來說明的,多呈繼承的語法與單一繼承很類似,只需要在宣告繼承的多個類之間加上逗號來分隔,定義形式為:

class b: public c, public d

;基類的說明順序只對要呼叫建構函式和析構函式時有影響:

建構函式:如果**依賴於b的

d部分要在

c部分之前初始化,則說明順序很重要,可以在繼承表中吧

d類放在

c類的前面。初始化是按照基類表中的說明順序進行初始化的。

啟用析構函式進行清除的順序:析構函式的呼叫按基類表說明順序相反的方向進行呼叫的。

虛函式與多型性

c++的多型性用一句話來概括就是:在基類的函式前加上

virtual

關鍵字,在派生類重寫該函式,執行時將會根據物件的實際型別來呼叫相應的函式。如果物件是派生類,就呼叫派生類的函式,如果物件是基類就呼叫基類的函式。

其中,物件的實際型別指的是定義的型別。在

c++中可以定義乙個指向派生類的指標而把這個指標指向基類,這句話的含義就是該指標的實際型別還是派生類。

純虛函式

virtual void breathe() = 0;

有純虛函式的類不能例項化物件。

函式的覆蓋與隱藏

函式的覆蓋是發生在基類和派生類之間的,並且函式完全相同,基類的函式為虛函式(所以派生類的函式也是虛函式?)這是覆蓋,其它的都屬於隱藏。

c++的多型性是通過虛函式來實現的,所以函式的覆蓋總是和多型關聯在一起。這裡就會回顧上面的虛函式與多型性的「根據物件的實際型別確定呼叫的函式」。

引用在呼叫函式傳參時經常使用指標傳遞:一是避免在實參佔較大記憶體時發生值的複製,二是完成特殊作用,比如修改記憶體內容。

引用一般用於函式形參上,也可以達到指標的目的,有時效果比指標好(可讀性上)。

標頭檔案包含問題的解決

使用#define

巨集定義<>和」」

的區別<>

表示編譯器搜尋標頭檔案的時候先從系統目錄下開始搜尋,然後再搜尋

path

環境變數所列出的目錄,不搜尋當前目錄。

」」表示從當前目錄

à系統目錄

àpsth

環境變數所列出的目錄

VC 深入詳解筆記之雜項

1.shellexecute null,t open t www.csdn.net null,null,sw shownormal 開啟網頁 2.直接在 中新增還是報錯 經過多次試驗,我已經知道咋個添了 型別是 int 4 名字是 a 3.今天在用vs2005的時候,突然載入了張ico,resour...

VC 深入詳解筆記之雜項

1.shellexecute null,t open t www.csdn.net null,null,sw shownormal 開啟網頁 2.直接在 中新增還是報錯 經過多次試驗,我已經知道咋個添了 型別是 int 4 名字是 a 3.今天在用vs2005的時候,突然載入了張ico,resour...

VC 深入詳解 學習筆記

一 1 使用定義二進位制的值來定義相關的意義 如dword w cs hredraw cs vredraw 這樣就可以通過 或 運算來組合,同時要是不需要某個屬性可以通過 取反結合 與 運算來實現dword w cs hredraw cs vredraw dword h w cs verdraw 2...