A. 使用類:
1. 重載操作符的格式為:operator op(argument-list) 其中,op是將要重載的操作符,它必須是有效的c++操作符。比如operator[]() 函數重載[]數組索引操作符。
2. c++對用戶定義的操作符重載的限制:a.重載后的操作符必須至少有一個操作數是用戶定義的類型。 b.使用操作符時不能違反操作符原來的句法規則。 c.不能定義新的操作符。 d.不能重載的操作符:sizeof、.、::、?:、typeid、const_cast、dynamic_cast、reinterpret_cast、static_cast. 下面的操作符只能通過成員函數進行重載:=、()、[]、->
3. 不要返回指向局部變量或臨時對象的引用!因為函數執行完畢后,局部變量和臨時變量將消失,引用將指向不存在的數據。
B. 類和動態內存分配:
1. 靜態類成員:無論創建了多少對象,程序都只創建一個靜態類變量副本。也就是說,類的所有對象共享同一個靜態成員。不能在類聲明中初始化靜態成員變量,這是因為聲明描述了如何分配內存,并不分配內存。例外是,靜態數據成員為整型或者枚舉型const。
2. StringBad sailor=sports; //用已知類對一個聲明類賦值,其實質是調用了復制構造函數StringBad(const StringBad&);
3. c++自動提供的成員函數:a.默認構造函數,如果沒有定義構造函數。 b.復制構造函數,如果沒有定義。c.賦值操作符 Class_name& operator=(const Class_name&); d.默認析構函數; e.地址操作符。Empty* operator&();
4. 當函數傳值傳遞對象或函數返回對象時,使用復制構造函數。隱式地復制構造函數是按值進行復制的,所以當類成員中有數組時,就會出現錯誤,因為不是復制的數組,而是復制的數組指針。析構的時候就會出錯,會delete2次同一指針。
5. 將一個已有的對象賦給另外一個對象時,將使用重載的賦值操作符,初始化時,不一定會使用賦值操作符,因為可能調用復制構造函數。它的隱式實現也是對成員進行逐個復制!重新定義時,避免將對象賦給自身。
6. 靜態類成員函數:不能通過對象調用靜態成員函數,是public時,可以通過類名和作用域解析操作符進行調用; 靜態成員函數由于不與特定的對象關聯,只能使用靜態數據成員。
7. 如果方法或函數要返回局部對象,則應返回對象,而不是指向對象的引用。在這種情況下,將使用復制構造函數來生成返回的對象。如果方法或函數要返回一個沒有公有復制構造函數的類(如ostream)的對象,它必須返回一個指向這種對象的引用!!
8. delete可與常規new操作符配合使用,但是不能與布局new操作符配合使用。