1.c編譯器不允許在struct內部定義成員函式,c++編譯器則可以
c++編譯器定義的結構體和類的區別:結構體內部成員(資料和方法)都只能是公有的而class則預設是私有的
2.系統提供的預設建構函式是不帶任何引數的,只生成物件並不進行資料成員的初始化操作
class test
}; //輸出結果是-58993460,-58993460兩個隨機數
3.如何檢視是否在程式中發生記憶體洩露?系統自定義的析構函式是否會釋放指標成員指向的記憶體空間?
3.1通過使用工具外掛程式boundschecker可以有效進行檢視
3.2構函式只是釋放定義的成員變數,不會釋放指標成員指向的空間,需要手動在析構函式釋放
4.關於繼承類的建構函式,在子類例項化物件會先呼叫父類的建構函式,如果父類的建構函式有引數,則必須在子類的建構函式進行初始化
5.c++規定在類中初始化常量和引用必須使用初始化列表
6.而冒號初始化與函式體初始化的區別在於:
冒號初始化是給資料成員分配記憶體空間時就進行初始化,就是說分配乙個資料成員只要冒號後有此資料成員的賦值表示式(此表示式必須是括號賦值表示式),那麼分配了記憶體空間後在進入函式體之前給資料成員賦值,就是說初始化這個資料成員此時函式體還未執行。
6.類內部函式過載的條件?函式的引數個數或型別不同(返回值不同以及預設函式引數情況要注意),也就是編譯器根據你提供的條件能知道要載入那個函式
第一種情況:
(1)void output();
(2)int output();
第二種情況:(1)void output(int a,int b=5);
(2)void output(int a);
以上兩種是典型的過載錯誤
7.資料型別轉換的條件:資料的記憶體模型是相同的,如int與char,作為強制型別轉換只可能丟失資料,但是可以轉換,而int型和乙個物件資料型別是不能進行型別轉換的
字類指標可以轉換為父類,父類不能轉換為字類
8.c++多型性接上例:
定義一全域性函式:
void global_breath(animal *pb)
呼叫時:fish fs;
animal *pa;
pa = &fs;
global_breath(pa); //輸出是animal breath;由於fish是從animal繼承的,因此記憶體首位址是相同的,系統先通過隱式轉換將fish轉換成animal型別指標
//pa實際上和&fs都是指向記憶體的首位址,因此先呼叫animal
如果animal成員函式是virtual breath();那麼此時輸出的就是fish breath,由於c++編譯器的多型性,編譯器將根據引數的型別進行繫結注意:由於fish是繼承了animal,因此有更多的資料成員,在做型別轉換的時候可以將fish轉換成animal,這樣只是損失部分資料,但不能將animal轉換成fish,記憶體模型不匹配
9.c++引用與指標的區別int a = 9;
int &b = a; //b作為a的引用,引用在定義時必須賦初值
int *pa = &a; //引用相當於變數a的別名,不占用新的記憶體空間,pa則需要記憶體空間來儲存a的位址
主要用於函式引數的傳遞,例如change(int &a, int &b);用於改變a,和b的值
10.類定義的標頭檔案也可以包含父類的標頭檔案,並非只是cpp檔案包含.h的標頭檔案11.virtual在子類不需要加上,子類函式依然還是虛函式。
12.cpp檔案參與編譯,.h檔案不參與編譯,.cpp檔案單獨編譯,生成.obj檔案,link(連線lib)生成.exe檔案
孫鑫VC課程 動態鏈結庫學習筆記
動態鏈結庫學習筆記 一.使用dumpbin在命令窗體檢視dll資訊 1.1檢視dll的匯出函式 當前工程目錄下 debug dumpbin exports dll 1.2檢視可執行程式用到的動態庫,以及相關的函式資訊 1.2.1 當前工程目錄下 debug dumpbin imports exe 1...
孫鑫VC 講座筆記 2 C
1,c語言中,結構體struct中不能包括函式的,而在c 中struct中可以包括函式。2,c 中結構體和類可以通用,區別主要表現在訪問控制方面 struct中預設是public,而 class中預設的是private。3,建構函式最重要的作用是建立物件的本身,c 中每個類可以擁有多個建構函式,但必...
孫鑫VC 講座筆記 2 C
1,c語言中,結構體struct中不能包括函式的,而在c 中struct中可以包括函式。2,c 中結構體和類可以通用,區別主要表現在訪問控制方面 struct中預設是public,而 class中預設的是private。3,建構函式最重要的作用是建立物件的本身,c 中每個類可以擁有多個建構函式,但必...