1. 面向對象編程的文件結構:
1)頭文件 .h, 包含類的定義。
2)源文件 .cpp, 類的成員函數,
3)源文件 .cpp, 編寫主函數
2. C++為了節省內存,將成員函數的代碼存儲在計算機內存的一個公用區中,以供該類的所有對象共享。
3. 對象初始化:1)用成員函數 putXxx 2)用構造函數。
4. delete 用法
delete 指針名 // 變量 delete *p
delete []指針名 // 一維數組 delete []p;
delete [行數]指針名 // 二維數組 delete [5]p;
只要程序中,有用new動態分配空間,那麼結尾的時候,必須要用delete釋放內存空間。
5. C++有三種權限 public private protect,只有public是可以在類外直接訪問的,默認權限是private
6. '::' 域運算符,就是表明成員變量或是成員方法是屬於那個類的。
7. 關於this指針。
如下函數this是指向本對象的只讀指針,是一個隱含的形參.由系統在幕後自動設置,自動維護。
如果想返回當前對象,可用 return *this;
8. 構造函數,可以在構造函數中實現初始化,注意:構造函數前面不能加上void,否則出錯!
如果重載了構造函數,那麼系統就不會自動生成構造函數了。
所以只要重載了構造函數,最好寫上無參的構造函數,這是一個好習慣。
9. 拷貝函數,就是為了對象間的拷貝,默認的拷貝函數會執行拷貝工作。
拷貝函數形式以上都實現了對象的復制,我暫時想不出有什麼區別。
10. 析構函數, 在對象消亡的時候,自動調用,默認的析構函數什麼都不做。
A a1;
A *a2 =new A();
程序結束的時候,a1 會自動調用析構函數,而a2不會自動調用析構函數!
我覺得可能是a1在棧內存中,運行結束後,彈棧,所以對象消失,會自動調用析構函數
而a2的聲明在棧內存中,而實例化new A()分配在堆中,彈棧的時候,a2會消失,但是new A()不會消失。
所以沒有調用析構函數。需要用 delete *a2 釋放。
11.預編譯
#ifdef DEBUG
可以進行debug測試#endif
以上的語句可以用於debug測試,如果不想執行debug裡面的語句,可以將前面的定義值去掉就行了。
12. static 聲明的語句,只會執行一次。
如:
for (i=0; i<10; i++)
{
static int b=0;
b++;
cout<
} // 可以看到b的值是不停增大的,意味著用static修飾的聲明語句只執行了一次!