一
類的繼承
假設有乙個動物類,他們都有呼吸,睡覺,吃飯
繼承起來就是這樣子的:
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...