版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國防彈玻璃膜數(shù)據(jù)監(jiān)測研究報告
- 二零二四年度學(xué)生離校安全保障責(zé)任協(xié)議范本3篇
- 2025至2030年中國汽車氣門咀數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國無級調(diào)速減速電機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國手動擦拭紙數(shù)據(jù)監(jiān)測研究報告
- 2025年度車輛買賣合同附帶車輛智能化升級服務(wù)4篇
- 二零二五年度煤炭運輸供應(yīng)鏈金融合同4篇
- 2025版文化產(chǎn)權(quán)托管正規(guī)范合同3篇
- 二零二五年度環(huán)保設(shè)施運營管理連帶責(zé)任保證函3篇
- 二零二五年度創(chuàng)新創(chuàng)業(yè)孵化器場地租賃服務(wù)協(xié)議9篇
- 2024年秋季學(xué)期學(xué)校辦公室工作總結(jié)
- 鋪大棚膜合同模板
- 長亭送別完整版本
- 2024年英語高考全國各地完形填空試題及解析
- 智能養(yǎng)老院視頻監(jiān)控技術(shù)方案
- 你比我猜題庫課件
- 無人駕駛航空器安全操作理論復(fù)習(xí)測試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡介
- 老年人心理健康量表(含評分)
評論
0/150
提交評論