最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++運(yùn)算符重載的方法詳細(xì)解析

 更新時(shí)間:2013年10月15日 08:59:15   作者:  
運(yùn)算符重載的方法是定義一個(gè)重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時(shí),系統(tǒng)就自動(dòng)調(diào)用該函數(shù),以實(shí)現(xiàn)相應(yīng)的運(yùn)算。也就是說,運(yùn)算符重載是通過定義函數(shù)實(shí)現(xiàn)的

運(yùn)算符重載實(shí)質(zhì)上是函數(shù)的重載

重載運(yùn)算符的函數(shù)一般格式如下:

函數(shù)類型    operator  運(yùn)算符名稱    (形參表列)

{對(duì)運(yùn)算符的重載處理}

例如,想將“+”用于Complex(復(fù)數(shù))的加法運(yùn)算,函數(shù)的原型可以是這樣的:

復(fù)制代碼 代碼如下:

Complex operator + (Complex & c1,Complex &c2);

其中,operator是關(guān)鍵字,時(shí)候?qū)iT用于定義重載運(yùn)算符的函數(shù)的,運(yùn)算符名稱就是C++提供給用戶的預(yù)定運(yùn)算符。

注意:函數(shù)名是由operator和運(yùn)算符組成。

上面的operator+就是函數(shù)名,意思是“對(duì)運(yùn)算符+重載“。只要掌握這點(diǎn),這可以發(fā)現(xiàn),這類函數(shù)和其他函數(shù)在形式上沒有什么區(qū)別。

兩個(gè)形參是Complex類對(duì)象的引用,要求實(shí)參為Complex類對(duì)象。

在定義了重載運(yùn)算符后,可以說:函數(shù)operator+重載了運(yùn)算符+。

在執(zhí)行復(fù)數(shù)相加的表達(dá)式c1+c2時(shí)(假設(shè)c1+c2都已被定義為Complex),系統(tǒng)就會(huì)調(diào)用operator+函數(shù),把c1+c2作為實(shí)參,與形參進(jìn)行虛實(shí)結(jié)合。

為了說明把運(yùn)算符重載后,執(zhí)行表達(dá)式就是調(diào)用函數(shù)的過程,可以把兩個(gè)整數(shù)相加也想象稱為調(diào)用下面的函數(shù):

復(fù)制代碼 代碼如下:

int operator + (int a,int b)
{
          return (a+b);
}

如果有表達(dá)式5+8,就調(diào)用此函數(shù),將5和8作為調(diào)用函數(shù)時(shí)的形參,函數(shù)的返回值為13,這就是通過函數(shù)的方法理解運(yùn)算符。

=====================示例代碼1.1==================================

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
class Complex
{
 public:
  Complex()
  {
   real=0;
   imag=0;
  }
  Complex(double r,double i)
  {
   real=r;
   imag=i;
  }
  Complex operator + (Complex &c2);//聲明運(yùn)算符的"+"函數(shù)
  void display();
 private:
  double real;
  double imag;
};
Complex Complex::operator+(Complex &c2)
{
 Complex c;
 c.real=real+c2.real;
 c.imag=imag+c2.imag;
 return c;
}
void Complex::display()
{
 cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
 Complex c1(3,4),c2(5,-10),c3;
 c3=c1+c2;
 cout<<"c1=";
 c1.display();
 cout<<"c2=";
 c2.display();
 cout<<"c3=";
 c3.display();
  return 0;
}

分析:

在main函數(shù)中,“c3=c1+c2;”在將運(yùn)算符+重載為類的成員函數(shù)后,C++編譯系統(tǒng)將程序中的表達(dá)式c1+c2解釋為:

c1.operator+(c2);//其中c1+c2是Complex類的對(duì)象

即以c2為實(shí)參調(diào)用c1的運(yùn)算符重載函數(shù)operator+(Complex & c2),進(jìn)行求值,得到兩個(gè)復(fù)數(shù)之和。上面的“operator+”是一個(gè)函數(shù)名,它是類Complex的成員函數(shù)。

在實(shí)際工作中,類的聲明和類的使用往往是分離的。假如在聲明Complex類時(shí),對(duì)運(yùn)算符+,-,*,/都進(jìn)行了重載,那么使用這個(gè)類的用戶在編程時(shí)可以完全不考慮函數(shù)是怎么實(shí)現(xiàn)的,

放心大膽地直接使用+,-,*,/進(jìn)行復(fù)數(shù)的運(yùn)算即可,顯然十分方便。

對(duì)上面的運(yùn)算符重載函數(shù)operator +還可以改寫的更簡(jiǎn)練一些:

復(fù)制代碼 代碼如下:

Complex Complex::operator+(Complex &c2)
{
 return Complex(c2.real+real,c2.imag+imag);
}

return語句中的Complex(c2.real+real,c2.imag+imag)是建立一個(gè)臨時(shí)對(duì)象,它沒有對(duì)象名,是一個(gè)無名對(duì)象。

在建立臨時(shí)對(duì)象過程中,調(diào)用構(gòu)造函數(shù)。return語句將此臨時(shí)對(duì)象作為函數(shù)返回值。

那么,我們將+運(yùn)算符進(jìn)行了重載以后,可否將一個(gè)常量和一個(gè)復(fù)數(shù)相加呢?比如:

復(fù)制代碼 代碼如下:

c3=3+c2;        //錯(cuò)誤,與形參類型不匹配

這是行不通的,因?yàn)槲覀兌xoperator +函數(shù)的時(shí)候,形參是兩個(gè)Complex的對(duì)象,也就是說,實(shí)參和形參匹配才可以調(diào)用函數(shù)。

應(yīng)寫成對(duì)象形式,如:

復(fù)制代碼 代碼如下:

c3=Complex(3,0)+c2;     //正確,類型均為對(duì)象

還需要說明的是:運(yùn)算符被重載后,其原有的功能仍然保留,沒有喪失或改變。

例如,運(yùn)算符+被重載以后,仍然可以用于int,float,double,char類型數(shù)據(jù)的運(yùn)算,同時(shí)又增加了用于復(fù)數(shù)相加的功能。

編譯系統(tǒng)根據(jù)表達(dá)式的上下文,即根據(jù)運(yùn)算符兩側(cè)(如果是單目運(yùn)算符則為一側(cè))的數(shù)據(jù)類型決定的。

如,對(duì)于3+5,則執(zhí)行整數(shù)加法;對(duì)于3.4+5.45,則執(zhí)行雙精度數(shù)加法;對(duì)于兩個(gè)復(fù)數(shù)類相加,則執(zhí)行復(fù)數(shù)加法。

相關(guān)文章

  • C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例

    C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中proxy代理模式的使用實(shí)例解析,代理模式可以被歸類為結(jié)構(gòu)型的設(shè)計(jì)模式,代理模式主張為對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問,需要的朋友可以參考下
    2016-03-03
  • c++如何保存vector到文件

    c++如何保存vector到文件

    這篇文章主要介紹了c++如何保存vector到文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++之eigen安裝與測(cè)試方式

    C++之eigen安裝與測(cè)試方式

    這篇文章主要介紹了C++之eigen安裝與測(cè)試方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++關(guān)于const與引用的分析講解

    C++關(guān)于const與引用的分析講解

    Const?是C++中常用的類型修飾符,常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?,引用變量是一個(gè)別名,也就是說,它是某個(gè)已存在變量的另一個(gè)名字。一旦把引用初始化為某個(gè)變量,就可以使用該引用名稱或變量名稱來指向變量
    2022-04-04
  • 淺析C++標(biāo)準(zhǔn)庫元組(tuple)源碼

    淺析C++標(biāo)準(zhǔn)庫元組(tuple)源碼

    這篇文章主要介紹了C++標(biāo)準(zhǔn)庫元組(tuple)源碼,介紹了什么是元組以及用法,并進(jìn)行了源碼分析,需要的朋友可以參考下
    2015-08-08
  • C++代碼改造為UTF-8編碼問題的總結(jié)(最新推薦)

    C++代碼改造為UTF-8編碼問題的總結(jié)(最新推薦)

    本文總結(jié)了如何將C++程序代碼改造為UTF-8編碼,包括操作系統(tǒng)、編譯器和終端等各方面的設(shè)置,在實(shí)際操作中,可以通過漸進(jìn)式更新的方式,只在新的代碼項(xiàng)目中使用UTF-8編碼,避免大規(guī)模修改舊代碼,感興趣的朋友一起看看吧
    2025-02-02
  • C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)詳解

    對(duì)于數(shù)組想必大家都不陌生首先得要知道的是對(duì)于數(shù)組元素在內(nèi)存存儲(chǔ)是連續(xù)性的,下面這篇文章主要給大家介紹了關(guān)于C語言多維數(shù)組數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • C語言中sizeof函數(shù)的基本使用總結(jié)

    C語言中sizeof函數(shù)的基本使用總結(jié)

    這篇文章主要給大家介紹了關(guān)于C語言中sizeof函數(shù)的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 最新評(píng)論

    永丰县| 沾化县| 康乐县| 福清市| 江源县| 普安县| 磴口县| 海阳市| 桐乡市| 泰宁县| 建湖县| 平乡县| 英吉沙县| 绥芬河市| 灌南县| 津市市| 达日县| 建始县| 佛坪县| 通辽市| 汕头市| 五大连池市| 黄骅市| 松潘县| 肇东市| 蒙自县| 油尖旺区| 洛宁县| 祥云县| 牙克石市| 德化县| 峨眉山市| 广宗县| 分宜县| 吉隆县| 郎溪县| 达孜县| 金沙县| 高要市| 惠水县| 大关县|