C++的一些知識點比較零碎,下面清單的形式做一些記錄與歸納,以供參考。
1、賦值操作符重載(深復制):
(1)由於目標對象可能引用了以前的一些數據,所以應該先delete這些數據;
(2)注意到對象可能對自己賦值,所以應該加上下面語句(another表示另一個對象),再進行(1)的操作:
(3)函數返回一個指向調用對象的引用;
(4)賦值操作符只能通過成員函數重載。
2、靜態類成員函數:
(1)靜態類成員函數在類的聲明中要加static關鍵字,而在定義中則不用;
(2)靜態類成員函數沒用this指針;
(3)如果靜態類成員函數是在公有部分中聲明,則可以使用類名和域解析操作符來調用它。
3、構造函數中new的使用:
(1)如果在構造函數中使用了new來初始化指針成員,則應該在析構函數中使用delete;
(2)new和delete需對應,new對應delete,new[]對應delete[];
(3)如果有多個構造函數,則必須使用相同的方式調用new,要麼都是new,要麼都是new[],因為析構函數只有一個,因此所有的構造函數都應該和它兼容。
4、有關函數返回對象:
(1)返回const對象的引用:
<1>返回對象會調用復制構造函數,而返回對象的調用則不會,因此效率會有所提高;
<2>引用指向的對象應該在函數執行時存在。
(2)返回非const對象的引用,一般有兩種情況:
<1>重載賦值操作符,使其能夠連續賦值;
<2>重載與cout一起使用的<<操作符,使其能夠串接輸出,返回形式為: ostream & 。
(3)返回非const對象:
假如返回的對象是函數中的局部變量,則不能返回引用,而應返回對象,因為函數執行完局部變量會被銷毀,引用將會失效,而返回對象則會調用復制構造函數,生成臨時對象。
5、指針與對象小結:
(1)常規聲明方法:
MyVector *p;
(2)可以將指針初始化為指向已有的對象:
MyVector *p = & array[0];
(3)使用new並通過調用類的構造函數來初始化指針,這將創建一個新的對象:
MyVector *p = new MyVector(0,0,0);
6、析構函數的調用:
(1)如果對象是動態變量,那麼當函數執行完定義該對象的程序塊時,將調用其析構函數;
(2)如果對象是靜態變量,則在程序結束時會調用其析構函數;
(3)如果對象是通過new創建的,只當顯示使用delete刪除對象時才會調用析構函數。
7、成員初始化列表:
構造函數可用成員列表為方法對成員數據進行初始化。例如:
(1)這種格式只能運用於構造函數中;
(2)必須使用這種方法來初始化非靜態const數據成員;
(3)必須使用這種方法來初始化引用數據成員。
//To be continued.