C++語言程序設(shè)計 運算符重載_第1頁
C++語言程序設(shè)計 運算符重載_第2頁
C++語言程序設(shè)計 運算符重載_第3頁
C++語言程序設(shè)計 運算符重載_第4頁
C++語言程序設(shè)計 運算符重載_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C++語言程序設(shè)計運算符重載2問題舉例——復(fù)數(shù)的運算classComplex //復(fù)數(shù)類聲明{public: Complex(doubler=0.0,doublei=0.0)//構(gòu)造函數(shù)

{real=r;imag=i;} voiddisplay(); //顯示復(fù)數(shù)的值private: doublereal; doubleimag;}; 3問題舉例——復(fù)數(shù)的運算用“+”、“-”能夠?qū)崿F(xiàn)復(fù)數(shù)的加減運算嗎?實現(xiàn)復(fù)數(shù)加減運算的方法

——重載“+”、“-”運算符4規(guī)則和限制可以重載C++中除下列運算符外的所有運算符:

..*::?:只能重載C++語言中已有的運算符,不可臆造新的。不改變原運算符的優(yōu)先級和結(jié)合性。不能改變操作數(shù)個數(shù)。經(jīng)重載的運算符,其操作數(shù)中至少應(yīng)該有一個是自定義類型。5兩種形式重載為類成員函數(shù)。重載為友元函數(shù)。6運算符函數(shù)聲明形式函數(shù)類型operator運算符(形參){......}重載為類成員函數(shù)時

參數(shù)個數(shù)=原操作數(shù)個數(shù)-1 (后置++、--除外)重載為友元函數(shù)時參數(shù)個數(shù)=原操作數(shù)個數(shù),且至少應(yīng)該有一個自定義類型的形參。7運算符成員函數(shù)的設(shè)計例17-1

將“+”、“-”運算重載為復(fù)數(shù)類的成員函數(shù)。規(guī)則:實部和虛部分別相加減。操作數(shù):兩個操作數(shù)都是復(fù)數(shù)類的對象。8#include<iostream>usingnamespacestd;classComplex //復(fù)數(shù)類聲明{public: //外部接口

Complex(doubler=0.0,doublei=0.0){real=r;imag=i;}

//構(gòu)造函數(shù)

Complexoperator+(Complexc2);//+重載為成員函數(shù)

Complexoperator-(Complexc2);//-重載為成員函數(shù)

voiddisplay(); //輸出復(fù)數(shù)private: //私有數(shù)據(jù)成員

doublereal; //復(fù)數(shù)實部

doubleimag; //復(fù)數(shù)虛部}; 9ComplexComplex::

operator+(Complexc2)//重載函數(shù)實現(xiàn){ Complexc; c.real=c2.real+real; c.imag=c2.imag+imag; returnc;}10ComplexComplex::

operator-(Complexc2)//重載函數(shù)實現(xiàn){ Complexc; c.real=real-c2.real; c.imag=imag-c2.imag; returnc;}11voidComplex::display(){cout<<"("<<real<<","<<imag<<")"<<endl;}intmain()//主函數(shù){ Complexc1(5,4),c2(2,10),c3;//聲明復(fù)數(shù)類的對象

cout<<"c1=";c1.display(); cout<<"c2=";c2.display();

c3=c1-c2; //使用重載運算符完成復(fù)數(shù)減法

cout<<"c3=c1-c2="; c3.display();

c3=c1+c2; //使用重載運算符完成復(fù)數(shù)加法

cout<<"c3=c1+c2="; c3.display(); return0;}12運算符友元函數(shù)的設(shè)計如果需要重載一個運算符,使之能夠用于操作某類對象的私有成員,可以此將運算符重載為該類的友元函數(shù)。函數(shù)的形參代表依自左至右次序排列的各操作數(shù)。13例17-2將+、-(雙目)重載為復(fù)數(shù)類的友元函數(shù)。兩個操作數(shù)都是復(fù)數(shù)類的對象。14#include<iostream.h>classComplex //復(fù)數(shù)類聲明{public: //外部接口

Complex(doubler=0.0,doublei=0.0)

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

friendComplexoperator+(Complexc1,Complexc2); //運算符+重載為友元函數(shù)

friendComplexoperator-(Complexc1,Complexc2); //運算符-重載為友元函數(shù)

voiddisplay(); //顯示復(fù)數(shù)的值private: //私有數(shù)據(jù)成員

doublereal; doubleimag;}; 15Complexoperator+(Complexc1,Complexc2) //運算符重載友元函數(shù)實現(xiàn){ return

Complex(c2.real+c1.real,c2.imag+c1.imag);}Complexoperator-(Complexc1,Complexc2) //運算符重載友元函數(shù)實現(xiàn){ return

Complex(c1.real-c2.real,c1.imag-c2.imag);}//其他函數(shù)和主函數(shù)同例17-116兩種重載函數(shù)的比較友元運算符函數(shù)的參數(shù)個數(shù)與運算符的元數(shù)相同;成員運算符函數(shù)的參數(shù)個數(shù)比運算符的元數(shù)少1。某些情況下,重載雙目運算符必須使用友元函數(shù)17例:在類Complex中,用成員運算符函數(shù)重載“+”運算符,使得complex的對象c1能與實數(shù)x做加法運算,結(jié)果得complex類的新對象,其中數(shù)據(jù)成員real的值比c1中的增加x:Complex

Complex::operator+(doublex){ Complextemp;temp.real=real+x;temp.imag=imag;

returntemp;}于是Complexc1(1.2,3.2),c2;c2=c1+2.1;//正確

c2=2.1+c1;//出錯18改用友元運算符函數(shù)重載前面所述的“+”運算符.……classComplex //復(fù)數(shù)類聲明{public: //外部接口

Complex(doubler=0.0,doublei=0.0)

{real=r;imag=i;}

friendComplexoperator+(Complexc1,Complexc2); friendComplexoperator+(Complexc1,doublex);//對上一個友元運算符函數(shù)的重載 friendComplexoperator+(doublex,Complexc1);//對上一個友元運算符函數(shù)的重載

voiddisplay(); //顯示復(fù)數(shù)的值private: //私有數(shù)據(jù)成員

doublereal; doubleimag;}; 19單目運算符的重載例17-3用“-”運算符實現(xiàn)求復(fù)數(shù)的相反數(shù)#include<iostream>usingnamespacestd;classComplex //復(fù)數(shù)類聲明{public: //外部接口

Complex(doubler=0.0,doublei=0.0){real=r;imag=i;}//構(gòu)造函數(shù)

Complexoperator-();//-重載為成員函數(shù)

voiddisplay(); //輸出復(fù)數(shù)private: //私有數(shù)據(jù)成員

doublereal; //復(fù)數(shù)實部

doubleimag; //復(fù)數(shù)虛部}; 20ComplexComplex::operator-(){ Complexc;c.real=-real; c.imag=-imag; returnc;}voidComplex::display(){cout<<"("<<real<<","<<imag<<")"<<endl;}intmain()//主函數(shù){ Complexc1(5,4),c2; c2=-c1; c2.display(); return0;}21關(guān)系運算符的重載例17-4重載關(guān)系運算符“==”,用來比較復(fù)數(shù)和復(fù)數(shù)、復(fù)數(shù)和實數(shù)、實數(shù)和復(fù)數(shù)是否相等。22classComplex //復(fù)數(shù)類聲明{public: //外部接口

Complex(doubler=0.0,doublei=0.0){real=r;imag=i;}//構(gòu)造函數(shù)

friendbooloperator==(Complexc1,Complexc2); friendbooloperator==(Complexc1,doublef); friendbooloperator==(doublef,Complexc2);

voiddisplay(); //輸出復(fù)數(shù)private: //私有數(shù)據(jù)成員

doublereal; //復(fù)數(shù)實部

doubleimag; //復(fù)數(shù)虛部};23對于要重載的某個運算符,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論