運算符重載(第二章C面向?qū)ο蟪绦蛟O(shè)計)_第1頁
運算符重載(第二章C面向?qū)ο蟪绦蛟O(shè)計)_第2頁
運算符重載(第二章C面向?qū)ο蟪绦蛟O(shè)計)_第3頁
運算符重載(第二章C面向?qū)ο蟪绦蛟O(shè)計)_第4頁
運算符重載(第二章C面向?qū)ο蟪绦蛟O(shè)計)_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上34、運算符重載的含義是什么?是否所有的運算符都可以重載?答:運算符重載是對已有的運算符賦予多重含義,同一個運算符作用于不用類型的數(shù)據(jù)導(dǎo)致不同行為。不是。在C+語言中除了(點運算符(.)、作用域運算符(:)、條件運算符(?:)、成員指針運算符(*)、編譯預(yù)處理命令的開始符號(#)五個運算符不能被重載外,其他運算符均可重載。35、運算符重載有哪兩種形式?這兩種形式有何區(qū)別?答:運算符重載有成員函數(shù)和友元函數(shù)兩種形式。 區(qū)別:運算符作為成員函數(shù)重載時的參數(shù)比作為友元函數(shù)重載時少一個。例如使用成員函數(shù)重載雙目運算符時只用一個參數(shù),而使用友元函數(shù)重載時要用兩個參數(shù)。 36、轉(zhuǎn)

2、換函數(shù)的作用是什么?答:1、支持混合類型表達式 2、轉(zhuǎn)換減少所需操作符的數(shù)目 37、分析下列程序的結(jié)果。#includeclass CMatrix public: cMatrix(int r,int c) row=r;col=c; element=new doublerow*col; double& operator() (int x,int y) return elementcol*(x-1)+y-1; double& operator() (int x,int y) const return elementcol*(x-1)+y-1; CMatrix() delete element; p

3、rivate: double *element; int row,col;void main() CMatrix m(5,8); for(int i=;i5;i+) m(i,1)=i+5; for(i=0;i5;i+) coutm(i,1)”,”; coutendl;運行結(jié)果:5,6,7,8,9, 38、定義一個復(fù)數(shù)類,通過重載運算符:=、+=、+、-、*、/,直接實現(xiàn)兩個復(fù)數(shù)之間的各種運算。編寫一個完整的程序(包括測試各種運算符的程序部分)。提示:兩復(fù)數(shù)相乘的計算公式為:(a+bi)*(c+di)=(ac-bd)+(ab+bc)I,而兩復(fù)數(shù)相除的計算公式為:(a+bi)/(c+di)=(ac

4、+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i。#include using namespace std; class complexpublic: complex(int i=0, int j=0):real(i), image(j) complex(const complex &a): real(a.real), image(a.image) complex& operator=(const complex &a) real = a.real; image = a.image; return *this; complex& operator+=(const comple

5、x &a) real = real + a.real; image = image + a.image; return *this; void display() cout ( real , image ) endl; friend complex operator+(const complex&, const complex&); friend complex operator-(const complex&, const complex&); friend complex operator*(const complex&, const complex&); friend complex o

6、perator/(const complex&, const complex&);private: int real; int image; complex operator+(const complex &a, const complex &b) complex r(a); r.real += b.real; r.image += b.image; return r; complex operator-(const complex &a, const complex &b) complex r; r.real = r.real - b.real; r.image = r.image - b.

7、image; return r; complex operator *(const complex &c1, const complex &c2) complex t; t.real=c1.real * c2.real - c1.image * c2.image; t.image = c1.image*c2.real +c1.real* c2.image; return t; complex operator/(const complex &c1, const complex &c2) complex t; t.real = (c1.real*c2.real + c1.image*c2.ima

8、ge) / (c2.real*c2.real+c2.image*c2.image); t.image = (c2.image*c2.real - c1.real*c2.image) / (c2.real*c2.real + c2.image*c2.image); return t; int main() complex a(32,6); complex b(23,63); complex c; c=a+b; c.display(); a+=b; a.display(); c=a-b; c.display(); c=a*b; c.display(); c=a/b; c.display(); re

9、turn 0;39、定義一個學(xué)生類,數(shù)據(jù)成員包括:姓名、學(xué)號、C+、英語和數(shù)學(xué)成績。重載運算符“”,實現(xiàn)學(xué)生對象的直接輸入輸出。增加轉(zhuǎn)換函數(shù),實現(xiàn)姓名的轉(zhuǎn)換。設(shè)計一個完整的程序,驗證成員函數(shù)和重載運算符的正確性。#includeusing namespace std; class studentpublic: student(char *n= ):number(201),cpp(0.0),eng(0.0),math(0.0) void set(char *nm,char *num,float _cpp,float ma,float _eng) name=nm; mumber=num; cpp=

10、_cpp; math=ma; eng=_eng; friend ostream& operator(ostream &in, student &b);private: char name20; char number20; float cpp; float math; float eng; ostream& operator(ostream &out, const student &a) out a.number a.cpp a.math a.eng (ostream &in, student &b) in a.number a.cpp a.math a.eng;

11、int main() student a; a.set(linda,201,34,64,64); cout b; cout b;40、定義一個平面直角坐標系上的一個點的類CPoint,重載“+”和“-”運算符,并區(qū)分這兩種運算符的前置和后置運算,構(gòu)造一個完整的程序。#include using namespace std; class CPointpublic: CPoint(int i=0, int j=0): x(i), y(j) CPoint& operator+(); /前置 CPoint operator+(int); /后置 CPoint& operator-(); /前置 CPo

12、int operator-(int); /后置 void display();private: int x; int y; CPoint& CPoint:operator +() +x; +y; return *this; CPoint& CPoint:operator -() -x; -y; return *this; CPoint CPoint:operator +(int) CPoint ret(*this); +x; +y; return ret; CPoint CPoint:operator -(int) CPoint ret(*this); -x; -y; return ret;

13、void CPoint:display() cout x y endl; int main() CPoint dot1(2,5); +dot1; dot1.display(); CPoint dot2(1,2); -dot2; dot2.display(); CPoint dot3(2,2); dot3+; dot3.display(); return 0;41、在上題的基礎(chǔ)上,為其定義友元函數(shù)實現(xiàn)重載運算符“+”。#include using namespace std; class CPointpublic: CPoint(int i=0, int j=0): x(i), y(j) CPo

14、int& operator+(); /前置 CPoint operator+(int); /后置 CPoint& operator-(); /前置 CPoint operator-(int); /后置 void display(); friend CPoint operator+(const CPoint &a, const CPoint &b);private: int x; int y; CPoint& CPoint:operator +() +x; +y; return *this; CPoint& CPoint:operator -() -x; -y; return *this; CPoint CPoint:operator +(int) CPoint ret(*this); +x; +y; return ret; CPoint CPoint:operator -(int) CPoint ret(*this); -x; -y; return ret; void CPoint:display() cout x y endl; CPoint operator+(const CPoint &a, const CPoint &b) CPoint t(a); t

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論