A. 使用類:
1. 重載操作符的格式為:operator op(argument-list) 其中,op是將要重載的操作符,它必須是有效的c++操作符。比如operator[]() 函數(shù)重載[]數(shù)組索引操作符。
2. c++對(duì)用戶定義的操作符重載的限制:a.重載后的操作符必須至少有一個(gè)操作數(shù)是用戶定義的類型。 b.使用操作符時(shí)不能違反操作符原來的句法規(guī)則。 c.不能定義新的操作符。 d.不能重載的操作符:sizeof、.、::、?:、typeid、const_cast、dynamic_cast、reinterpret_cast、static_cast. 下面的操作符只能通過成員函數(shù)進(jìn)行重載:=、()、[]、->
3. 不要返回指向局部變量或臨時(shí)對(duì)象的引用!因?yàn)楹瘮?shù)執(zhí)行完畢后,局部變量和臨時(shí)變量將消失,引用將指向不存在的數(shù)據(jù)。
B. 類和動(dòng)態(tài)內(nèi)存分配:
1. 靜態(tài)類成員:無論創(chuàng)建了多少對(duì)象,程序都只創(chuàng)建一個(gè)靜態(tài)類變量副本。也就是說,類的所有對(duì)象共享同一個(gè)靜態(tài)成員。不能在類聲明中初始化靜態(tài)成員變量,這是因?yàn)槁暶髅枋隽巳绾畏峙鋬?nèi)存,并不分配內(nèi)存。例外是,靜態(tài)數(shù)據(jù)成員為整型或者枚舉型const。
2. StringBad sailor=sports; //用已知類對(duì)一個(gè)聲明類賦值,其實(shí)質(zhì)是調(diào)用了復(fù)制構(gòu)造函數(shù)StringBad(const StringBad&);
3. c++自動(dòng)提供的成員函數(shù):a.默認(rèn)構(gòu)造函數(shù),如果沒有定義構(gòu)造函數(shù)。 b.復(fù)制構(gòu)造函數(shù),如果沒有定義。c.賦值操作符 Class_name& operator=(const Class_name&); d.默認(rèn)析構(gòu)函數(shù); e.地址操作符。Empty* operator&();
4. 當(dāng)函數(shù)傳值傳遞對(duì)象或函數(shù)返回對(duì)象時(shí),使用復(fù)制構(gòu)造函數(shù)。隱式地復(fù)制構(gòu)造函數(shù)是按值進(jìn)行復(fù)制的,所以當(dāng)類成員中有數(shù)組時(shí),就會(huì)出現(xiàn)錯(cuò)誤,因?yàn)椴皇菑?fù)制的數(shù)組,而是復(fù)制的數(shù)組指針。析構(gòu)的時(shí)候就會(huì)出錯(cuò),會(huì)delete2次同一指針。
5. 將一個(gè)已有的對(duì)象賦給另外一個(gè)對(duì)象時(shí),將使用重載的賦值操作符,初始化時(shí),不一定會(huì)使用賦值操作符,因?yàn)榭赡苷{(diào)用復(fù)制構(gòu)造函數(shù)。它的隱式實(shí)現(xiàn)也是對(duì)成員進(jìn)行逐個(gè)復(fù)制!重新定義時(shí),避免將對(duì)象賦給自身。
6. 靜態(tài)類成員函數(shù):不能通過對(duì)象調(diào)用靜態(tài)成員函數(shù),是public時(shí),可以通過類名和作用域解析操作符進(jìn)行調(diào)用; 靜態(tài)成員函數(shù)由于不與特定的對(duì)象關(guān)聯(lián),只能使用靜態(tài)數(shù)據(jù)成員。
7. 如果方法或函數(shù)要返回局部對(duì)象,則應(yīng)返回對(duì)象,而不是指向?qū)ο蟮囊谩T谶@種情況下,將使用復(fù)制構(gòu)造函數(shù)來生成返回的對(duì)象。如果方法或函數(shù)要返回一個(gè)沒有公有復(fù)制構(gòu)造函數(shù)的類(如ostream)的對(duì)象,它必須返回一個(gè)指向這種對(duì)象的引用!!
8. delete可與常規(guī)new操作符配合使用,但是不能與布局new操作符配合使用。