• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      C++中運算符的重載應(yīng)用

      2010-08-15 00:48:41
      辦公自動化 2010年22期
      關(guān)鍵詞:參數(shù)表運算符賦值

      張 捷

      (黃岡職業(yè)技術(shù)學(xué)院 黃岡 438002)

      一、 什么是運算符的重載

      運算符重載是對已有的運算符賦予多重含義,使同一個運算符作用于不同類型的表達(dá)式的行為。運算符重載的實質(zhì)就是函數(shù)重載。在實現(xiàn)過程中,首先把指定的運算符表達(dá)式轉(zhuǎn)化為對運算符函數(shù)的調(diào)用,運算對象轉(zhuǎn)化為運算符函數(shù)的實參,然后根據(jù)實參的類型來確定需要調(diào)用的函數(shù),這個過程是在編譯過程中完成的。

      例如:用“+”運算符完成兩個實數(shù)、兩個復(fù)數(shù)、兩個字符串的相關(guān)運算。兩個實數(shù)a=10,b=2,則兩個實數(shù)相加的結(jié)果是:a+b=10+2=12;兩個復(fù)數(shù):a=10+2i,b=2+10i,則兩個復(fù)數(shù)相加的結(jié)果是:a+b=12+12i;兩個字符串:a=“visual”,b=“ studio”,則兩字符串連接的結(jié)果是:a+b=“visual studio”。由上例可以看出,同一個運算符“+”可以用于完成實數(shù)加法、復(fù)數(shù)加法及字符串連接等不同的運算,得到不同的結(jié)果。這就是“+”運算符的重載。因此,所謂的運算符重載就是用同一個運算符完成不同的運算操作。

      二、 運算符重載的規(guī)則

      對運算符進(jìn)行重載需要遵守以下規(guī)則:

      (1)重載運算符限制在C++語言中已有的并允許重載的運算符。C++中的運算符除五個運算符“.、* 、::、sizeof、?:”之外,其它都可重載。

      (2)重載之后運算符的優(yōu)先級和結(jié)合性均不改變。這就是說,對運算符重載不改變運算符的優(yōu)先級和結(jié)合性,并且運算符重載時,單目運算符只能重載為單目運算符,雙目運算符只能重載為雙目運算符。

      (3)不能改變運算符運算數(shù)的個數(shù)。在運算數(shù)中,至少有一個操作對象是自定義類型。

      (4)重載運算含義必須清楚,不能產(chǎn)生二義性。運算符的重載實質(zhì)是函數(shù)重載。運算符重載一般分兩種形式,即重載為類的成員函數(shù)和重載為類的友元函數(shù),這兩種形式都可訪問類中的私有成員。

      三、 運算符重載的實現(xiàn)

      在C++中,運算符的重載有兩種方法:使用類的成員函數(shù)重載和使用fiend函數(shù)重載。下面通過實例來說明這兩種重載方法的實現(xiàn)。

      1、 使用成員函數(shù)重載運算符

      運算符重載函數(shù)為類的成員函數(shù)的常見格式為:

      返回類型 類名::operator重載運算符(參數(shù)表)

      {函數(shù)體}

      其中,函數(shù)類型指定重載運算符的返回值類型;operator是定義運算符重載函數(shù)的關(guān)鍵字;運算符是要重載的運算符名稱;參數(shù)表中給出重載運算所需要的參數(shù)和類型。一般情況下,單目運算符采用成員函數(shù)形式重載時,操作數(shù)由對象的this指針給出,不需要參數(shù);雙目運算符采用成員函數(shù)形式重載時,一個操作數(shù)是對象本身的數(shù)據(jù),由this指針指出。參數(shù)表的參數(shù)為第二操作數(shù),只需一個參數(shù)??傊?,當(dāng)運算符重載為類的成員函數(shù)時,除后置“++、--”外,函數(shù)的參數(shù)個數(shù)比原來的操作數(shù)個數(shù)少一個。

      實例:定義一個復(fù)數(shù)類,重載“=”運算符,使這個運算符能直接完成復(fù)數(shù)的賦值運算。

      #include

      Calss complex

      {private:

      Float real,image;

      Public:

      Complex(float r=0,float i=0)

      {real=r;image=i;}//缺省構(gòu)造函數(shù)

      Void show(int i) //顯示輸出復(fù)數(shù)

      {count<<”c”<

      Void operator=(complex&c)

      {real=c.real;image=c.image;

      }

      };

      Void main(void)

      {complexc1(25,20),c2;

      C1.show(1);

      C2=c1;

      C2.show(2);

      }

      程序執(zhí)行后輸出:c1=25+50i c2=25+50i

      該重載函數(shù)的函數(shù)名為“operator=”,返回類型為void,形參為復(fù)數(shù)類對象的引用complex&c。當(dāng)程序執(zhí)行主函數(shù)中的賦值語句c2=c1而遇到賦值運算符“=”時,自動調(diào)用賦值運算符“=”重載函數(shù)“operator=()”,并將“=”運算符右邊的操作數(shù)c1作為實參,左邊操作數(shù)c2作為調(diào)用重載函數(shù)的對象,即作了一次c2.operator=(c1)的函數(shù)調(diào)用。在函數(shù)的調(diào)用過程中,實參c1傳給形參c,在函數(shù)體內(nèi)完成了復(fù)數(shù)實部與虛部的賦值操作。

      2、 使用friend函數(shù)重載運算符

      對于運算符op,如果它的一個操作數(shù)為類A的對象,就可以將運算符重載為A類的友元函數(shù),該函數(shù)有兩個形參,其中一個形參的類型是A類。經(jīng)過這樣的重載后,表達(dá)式k op t就相當(dāng)于函數(shù)調(diào)用operator op(k,t)。與使用成員函數(shù)定義的方法相比較,友元函數(shù)的一般定義格式只是在前面多了一個關(guān)鍵字friend,其他項目含義相同,除格式差別外,友元函數(shù)不是k所在類的成員函數(shù)。運算符重載函數(shù)為友元函數(shù)的一般定義格式為:Friend類型operator重載運算符(參數(shù)表){函數(shù)體}

      四、 應(yīng)用運算符重載應(yīng)注意的問題

      由于C++語言支持函數(shù)重載,所以才能將運算符當(dāng)成函數(shù)來使用。但是在編程過程中要適當(dāng)運用運算符重載:既不要因過分擔(dān)心自己不會用而不使用,它的本質(zhì)仍然是程序員們熟悉的函數(shù);也不要過度的使用,如果它不能使代碼變得更加易讀易寫,那就別用,否則會增加程序出錯的可能。同時在使用運算符的重載時還要注意如下問題:

      ■不能改變C++內(nèi)部數(shù)據(jù)類型(如int,float等)的運算符

      ■不能重載“.”,因為“.”在類中對任何成員都有意義,已經(jīng)成為標(biāo)準(zhǔn)用法。

      ■不能重載目前C++運算符集合中沒有的符號,如#,@,$等。原因有兩點,一是難以理解,而是難以確定優(yōu)先級。

      ■對已經(jīng)存在的運算符進(jìn)行重載時,不能改變優(yōu)先級規(guī)則,否則將引起混亂。

      [1]蘭添才.C++中函數(shù)重載與操作符重載的應(yīng)用探討[J].福建電腦,2003,(02).

      [2]藍(lán)雯飛,陸際光.C++語言的重載機制剖析[J].微計算機應(yīng)用,2000,(05).

      [3]李 智.C++宏,函數(shù)重載與模板機制[J].電腦,1995,(05).

      [4]李 智.C++函數(shù)重載與繼承機制的應(yīng)用[J].中國金融電腦,1995,(08).

      [5]沈慧娟.C++語言中運算符重載的應(yīng)用研究[J].甘肅廣播電視大學(xué)學(xué)報,2006,(03).

      猜你喜歡
      參數(shù)表運算符賦值
      關(guān)于1 1/2 … 1/n的一類初等對稱函數(shù)的2-adic賦值
      L-代數(shù)上的賦值
      鋼結(jié)構(gòu)有限元參數(shù)化分析系統(tǒng)研究
      老祖?zhèn)魇诨具\算符
      用手機插頭的思路學(xué)習(xí)布爾運算符
      電腦報(2019年16期)2019-09-10 07:22:44
      強賦值幺半群上的加權(quán)Mealy機與加權(quán)Moore機的關(guān)系*
      WPS在成形管生產(chǎn)過程中的運用
      EXCEL在調(diào)度自動化系統(tǒng)數(shù)據(jù)庫維護中的應(yīng)用
      利用賦值法解決抽象函數(shù)相關(guān)問題オ
      C++運算符重載剖析
      價值工程(2014年17期)2014-04-16 03:29:20
      化隆| 孝义市| 楚雄市| 河北省| 濮阳市| 五莲县| 海兴县| 桦甸市| 平武县| 饶平县| 南涧| 金乡县| 大石桥市| 瑞丽市| 内黄县| 新巴尔虎右旗| 安多县| 交口县| 阜城县| 维西| 棋牌| 浠水县| 内乡县| 舞阳县| 竹山县| 安仁县| 舞阳县| 抚顺市| 大宁县| 来安县| 萍乡市| 新密市| 阳江市| 乌苏市| 开江县| 河间市| 铁岭县| 太康县| 尤溪县| 客服| 桦南县|