freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

觀察上例,對于s1"constent"這樣的表達(dá)式,編譯器又(已修改)

2024-10-14 10:44 本頁面
 

【正文】 觀察上例,對于 s1 + Constent 這樣的表達(dá)式,編譯器又如何解釋呢? String 類中并沒有定義 operator + (char*) 這樣的運算符重載呀!執(zhí)行這樣的表達(dá)式,仍然調(diào)用的是類中所定義的加法運算符重載。 當(dāng)編譯器遇到上述一個對象加一個串常量的表達(dá)式時,就試圖找到一個 operator + (char*) 這樣的運算符重載或者與表達(dá)式最為匹配的運算符重載。若找不到,它并不急于報錯,而是試圖利用類中已有的運算符重載 operator + (Stringamp。) 來匹配這一表達(dá)式。然而,該函數(shù)中的參數(shù)是一個串對象的引用,而不是字符串常量,類型不匹配。這時,編譯器就會查找類的構(gòu)造函數(shù),看是否存在一個 String(char*) 這樣用 C 串來創(chuàng)建串對象的構(gòu)造函數(shù)。若存在,則通過該構(gòu)造函數(shù)用常串創(chuàng)建一個臨時的對象,以滿足加法運算符重載的要求。 實用中,再重載一個 operator + (char*) 將可以避免許多麻煩。但最佳選擇還是使用友元運算符。 友元運算符 除了以下 5 種運算符,所有的運算符重載都可以是類的友元函數(shù): = ( ) [ ] type 其中: = 包括所有的復(fù)合賦值運算符; ( ) 為函數(shù)調(diào)用運算符;[ ] 為下標(biāo)運算符; 為用于指針的成員訪問運算符;而 type則是任一合法的數(shù)據(jù)類型,這樣的運算符重載叫做轉(zhuǎn)換函數(shù)(后面介紹)。 通常,將說明成類中成員函數(shù)的運算符重載稱為成員(或類)運算符;將說明成類的友元的運算符重載稱為友元運算符。 // 將 String 類中的加法運算符重載改為友元 friend String operator + (Stringamp。, Stringamp。)。 // 改寫加法運算符重載函數(shù) String operator + (Stringamp。 rs1, Stringamp。 rs2) { String temp。 = + 。 = new char[ + 1]。 strcpy(, )。 strcat(, )。 return temp。 } 有了上述的定義,編譯器在遇到 s1 + s2 這樣的表達(dá)式時,就將它解釋為: operator + (s1, s2)。 即調(diào)用前面定義的友元運算符。 對類似于 Constant + s 這樣的表達(dá)式,編譯器就將其解釋為: operator + (Constant, s)。 而成員運算符將對此表達(dá)式無能為力。這是因此字符串常量不是一個對象,它不存在加法運算符重載。 對比成員運算符和友元運算符可以發(fā)現(xiàn):若重載的運算符是一 個一元運算符,則成員運算符不能有參數(shù),而友元運算符必須有一個類對象或引用的參數(shù);若重載的運算符是一個二元運算符,則成員運算符必須有一個參數(shù),而友元運算符必須有兩個類對象或引用的參數(shù)。另外,二元運算符重載為友元使用起來比較方便。 轉(zhuǎn)換函數(shù) 轉(zhuǎn)換函數(shù)是指類中定義的非靜態(tài)成員函數(shù),其一般形式為: class_name :: operator type ( )。 其中, type 為任一合法的數(shù)據(jù)類型,也就是轉(zhuǎn)換函數(shù)返回值的類型。 例:為 String 類增加一個轉(zhuǎn)換函數(shù): operator const char* () { return (const char*)pStr。 } operator int () { return nLen。 } 前者可以替代 String 類中的 GetContent() 成員函數(shù),后者可以替代其 Length() 成員函數(shù) 。例: cout co
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1