欧美一级a看免费观看,一本在线视频在线观看,国产偷自拍对白在线视频,精品欧美一区二区在线观看

    1. <dfn id="ktbui"><var id="ktbui"></var></dfn>
    2. 您當前位置: 唯學(xué)網(wǎng) » 計算機等級考試培訓(xùn) » 二級專題

      計算機等級考試二級C++運算符重載考點解析

      來源:唯學(xué)網(wǎng)•教育培訓(xùn)(www.jscs8.com)  【唯學(xué)網(wǎng) • 中國教育電子商務(wù)平臺】 加入收藏

      眾所周知,計算機等級考試二級C++在等級考試中算是比較難的科目,所以考生應(yīng)該加強復(fù)習(xí)。在平時考生一定要多看、多想、多讀。負責計算機等級考試相關(guān)老師為考生整理了2014年計算機等級考試二級C++運算符重載考點解析,希望對考生有所幫助。

      8.1 運算符函數(shù)據(jù)與運算符重載

      運算符重載是計算機語言固有多態(tài)性的體現(xiàn),是構(gòu)成計算機語言的基礎(chǔ)之一。

      C++把重載的運算符視為特殊的函數(shù),稱為運算符函數(shù)。運算符重載就是函數(shù)重載的一種特殊情況。像對待一般重載函數(shù)一樣,編譯系統(tǒng)能夠依據(jù)使用運算符的不同環(huán)境,即參數(shù)(操作數(shù))的數(shù)量或類型的差異,區(qū)分同一運算符的不同含義。

      “運算符重載”是針對C++中原有運算符進行的,不可能通過重載創(chuàng)造出新的運算符。除了.、.*、->*、::、?:這五個運算符外,其他運算符都可以重載。由于很多符號是一元運算符和二元運算符公用的,為了避免含混,不得為重載的運算符函數(shù)設(shè)置默認值,調(diào)用時也就不得省略實參。

      除了new和delete這兩個較為特殊運算符以外,任何運算符如果作為成員函數(shù)重載時不得重載為靜態(tài)函數(shù)。=、[ ]、()、->以及所有的類型轉(zhuǎn)換運算符只能作為成員函數(shù)重載,而且不能是針對枚舉類型操作數(shù)的重載。

      運算符函數(shù)的函數(shù)名是由運算符前加關(guān)鍵字operator構(gòu)成的,在聲明運算符或調(diào)用運算符時都可以用這個名稱。

      8.2 典范運算符的重載

      1關(guān)于分數(shù)類fraction

      fraction的聲明和定義包含在頭文件fraction.h和程序文件fraction.cpp中。

      一個標準的用fraction表示的分數(shù)須滿足以下復(fù)印件:

      ①分母永遠為正,分數(shù)和符號用分子表示;

      ②分子分母互質(zhì),即總表示為最簡分數(shù)。

      fraction通過兩個私有數(shù)據(jù)成員num和den分別保存分子和分母,并在必要時調(diào)用standardize函數(shù)進行標準化處理,以使num和den的值滿足標準分數(shù)的條件。gcd是求兩個整數(shù)的最大公約數(shù)的函數(shù),standardize在化簡分數(shù)時要調(diào)用它。

      2重載取負運算符“-”

      因為fraction用分子的符號代表整個分數(shù)的符號,因此所謂“取負”只需對分子num取負就可以了。由于取負運算符“-”是一元運算符,當作為成員函數(shù)重載時參數(shù)表中沒有參數(shù),那個唯一的操作數(shù)以this指針的形式隱藏在參數(shù)表中。為此,只需要在fraction.h的類聲明中增加:

      fraction poerator -()const { return fraction(-num,den);}

      就可以了。由于在類聲明中直接給出了完整定義,因此是一個inline函數(shù)。

      “-”是一個典型的一元運算符,除++、--外的其他一元運算符的重載都可以參考這里描述的方法。

      3重載加法運算符“+”

      “ +”是一個二元運算符,因此作為成員函數(shù)重載時參數(shù)表中只有一個參數(shù),對應(yīng)于第二操作數(shù),而第一操作數(shù)就是對象本身,僅以this指針的形式隱藏在參靈敏表中。

      “+”是一個典型的二元運算符,除賦值類運算符外的其他二元運算符的重載都可以參考這里描述的方法。

      4重載增1運算符“+ +”

      + +既可以是前綴運算符(前增1),又可以是后綴運算符(后增1)。為了區(qū)分這兩種情況,重載這兩個運算符時必須在格式上有所區(qū)別:重載后綴+ +時必須多一個虛擬參數(shù):int,因此從形式上看像是一個二元運算符重載。

      5重載類型轉(zhuǎn)換符“l(fā)ong”

      類型轉(zhuǎn)換符必須作為成員函數(shù)重載。在重載類型轉(zhuǎn)換符時,由于運算符本身已經(jīng)表示出返回值類型,因此不需要返回值類型的聲明。一個分數(shù)可以看成是由一個整數(shù)部分和一個純分數(shù)部分組成的,為了取得一個分數(shù)的整數(shù)部分,可為fraction重載類型轉(zhuǎn)換符long。為此可在 fraction.h的類聲明中增加:

      opertator long()const { return num/den;}

      6重載賦值運算符“=”

      賦值運算符只能作為成員函數(shù)重載。

      常見的真正需要重載賦值運算符的情況是:類中包含指向動態(tài)空間的指針

      賦值運算符=的重載應(yīng)注意以下幾點:

      ①返回值聲明為引用,而函數(shù)體中總是用語句return *this;返回;

      ②如果參數(shù)被聲明為指向同類對象的引用或指針,應(yīng)判別所指向?qū)ο蟮氖欠衽c被賦值對象為同一對象,如果是,立即返回,不做任何賦值處理;

      ③如果被賦值對象占用了動態(tài)空間或其他資源,應(yīng)首先釋放這些資源,以便接收新的資源;

      ④如果參數(shù)被聲明為指針或引用,通常應(yīng)加上const修飾;

      ⑤如果參數(shù)被聲明為指針,應(yīng)判別是否為空,以便做出特殊處理;

      ⑥一個類如果需要重載運算符=,通常也就需要定義自己特有的拷貝構(gòu)造函數(shù),反之亦然。

      7重載復(fù)合賦值運算符“+=”

      重載復(fù)合賦值類運算符,如+=、-=等,也應(yīng)遵循上述重載賦值運算符的注意事項。

      與賦值運算符不同的是,復(fù)合賦值類運算符既可作為成員函數(shù)重載也可作為非成員函數(shù)重載。在后一種情況下,兩個操作數(shù)都必須出現(xiàn)在參數(shù)表中;為了保持運算符原有的特性,第一參數(shù)應(yīng)當聲明為引用(否則就無法改變它的值),返回值也應(yīng)當像重載“=”那樣聲明為引用,并在最后將獲得新值的第一參數(shù)返回。

      8重載關(guān)系操作符“>”

      重載的關(guān)系操作符函數(shù)應(yīng)返回邏輯值。對于 fraction的兩個對象,可以通過比較通分后的兩個分子來確定它們的大小。為此,可在fraction.h的類聲明中增加如下的成員函數(shù)聲明:

      bool operator>(fraction f){ return num*f.den>f.num*den;}

      其他關(guān)系運算符可以參照重載。

      9重載下標訪問運算符“[ ]”

      運算符[ ]只能作為成員函數(shù)重載。

      10重載C+ +流運算符“”和“”

      C+ +流的輸入運算符和輸出運算符只能作為非類成員函數(shù)重載。在一個類中,如有必要,可將或聲明為友元函數(shù)。

      8.3 運算符重載應(yīng)注意的幾個問題

      1重載的運算符應(yīng)保持其原有的基本語義

      重載的運算符應(yīng)該體現(xiàn)為原運算符的功能在新的數(shù)據(jù)類型上的延伸,它的使用應(yīng)當使程序中算法的表達顯得更流暢、自然,使閱讀程序的人在不借助于其他說明資料的情況下就能夠正確理解。不要讓重載的運算符去勉強承擔那些更適于一般函數(shù)承擔的功能。

      2.生載的運算符應(yīng)盡可能保持基原有的特性

      運算符的操作數(shù)個數(shù)、優(yōu)先級和結(jié)合性是三個最基本的特性,而且是重載時自然得以保持的特性,因此無須采取專門的措施。需要注意的是下面這些特性。

      ①是否要求第一操作數(shù)為有左值操作數(shù)。

      ②是否修改第一操作數(shù)。

      ③操作的結(jié)果是否為有左值數(shù)據(jù)。

      ④應(yīng)保證第二操作數(shù)不被改變。

      3運算符的重載應(yīng)當配套

      某些運算符之間關(guān)系密切,存在著某種邏輯上的聯(lián)系,因此若需要重載其中的某一個,往往就意味著同組的其他運算符也需要重載。

      4使用引用參數(shù)還是非引用參數(shù)?

      非引用參數(shù)的優(yōu)點是:以傳值方式傳遞參數(shù),形參變量只是實參的副本,對形參變量的修改不會影響實參;在相關(guān)對象存在只需一個實參的構(gòu)造函數(shù)的情況下,可以充分利用表達式處理過程中的自動轉(zhuǎn)換機制,使表達式顯得更自然。但當對象很大或需要深層復(fù)制時,非引用參數(shù)占用的計算機資源較多,影響參數(shù)傳遞的效率。

      引用參數(shù)的優(yōu)點是:當對象很大或需要深層復(fù)制時,可大大減少對資源的占用,提高參數(shù)傳遞的效率。但無法利用系統(tǒng)的自動轉(zhuǎn)換機制。

      5作為成員函數(shù)重載還是作為非成員函數(shù)重載?

      =、[ ]、()、->以及所有的類型轉(zhuǎn)換運算符只能作為成員函數(shù)重載。如果允許第一操作數(shù)不是同類對象,而是其他數(shù)據(jù)類型,則只能作為非成員函數(shù)重開車(如輸入輸出流運算符和就是這樣的情況)。若希望系統(tǒng)在必要時能夠利用只需一個實參的構(gòu)造函數(shù)自動對第一操作數(shù)進行轉(zhuǎn)換,也應(yīng)將該運算符作為非成員函數(shù)重載;此種情況下,運算符函數(shù)的參數(shù)應(yīng)該是非引用參數(shù),否則不能達到所希望的效果。其他情況下一般應(yīng)作為成員函數(shù)重載。

      如若獲知更多關(guān)于計算機等級考試培訓(xùn)的資訊,請隨時關(guān)注唯學(xué)網(wǎng)計算機培訓(xùn)欄目,小編會為您在第一時間做出相關(guān)報道。

      0% (0)
      0% (10)
      已有條評論