內(nèi)蒙古科技大學(xué)面向?qū)ο蟪绦蛟O(shè)計實驗10 多態(tài)(一)_第1頁
內(nèi)蒙古科技大學(xué)面向?qū)ο蟪绦蛟O(shè)計實驗10 多態(tài)(一)_第2頁
內(nèi)蒙古科技大學(xué)面向?qū)ο蟪绦蛟O(shè)計實驗10 多態(tài)(一)_第3頁
內(nèi)蒙古科技大學(xué)面向?qū)ο蟪绦蛟O(shè)計實驗10 多態(tài)(一)_第4頁
內(nèi)蒙古科技大學(xué)面向?qū)ο蟪绦蛟O(shè)計實驗10 多態(tài)(一)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計實驗報告課程名稱:面向?qū)ο蟮某绦蛟O(shè)計姓名:陳偉光實驗名稱:多態(tài)(二)學(xué)號:1567159118任課教師:劉月峰專業(yè):軟件工程指導(dǎo)教師:劉月峰班級:15-軟件一班一、實驗?zāi)康?理解靜態(tài)聯(lián)編和動態(tài)聯(lián)編的概念;2理解掌握成員函數(shù)方式運算符重載;3理解掌握友元函數(shù)方式運算符重載;4理解掌握+、-、=運算符的重載。二、實驗環(huán)境編譯器:Visual C+ 6.0.操作系統(tǒng):Windows 7旗艦版三、實驗內(nèi)容2.1練習(xí)(一):1理解下面的程序,并在VC+6.0下運行查看結(jié)果,回答程序后面的問題。#include iostream.hclass CComplexpublic:

2、CComplex() real = 0; imag = 0;CComplex(int x,int y) real = x; imag = y;int real;int imag;CComplex operator + (CComplex obj1)- CComplex obj2(real + obj1.real, imag + obj1.imag); return obj2;void main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; -cout obj.real endl;cout o

3、bj.imag endl;問題一:處的運算符重載,為什么該函數(shù)的返回值要設(shè)計成CComplex類型?問題二:處的運算符重載函數(shù)調(diào)用就相當(dāng)于“obj=operator+(obj1,obj2);”,但是為什么CComplex類中的運算符重載函數(shù)只設(shè)計了一個參數(shù)?2理解下面的程序,并在VC+6.0下運行查看結(jié)果,回答程序后面的問題。#include iostream.hclass CComplexpublic:CComplex() real = 0.0; imag = 0.0;CComplex(float x, float y) real = x; imag = y;CComplex operato

4、r + (CComplex &obj1, CComplex &obj2) CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag); return obj3;CComplex &operator+(CComplex &obj) obj.real += 1; obj.imag +=1; return obj;void print() coutreal+imagiendl;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -=

5、 1;return x;void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+, obj3=;obj3.print();+obj3;coutafter+, obj3=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();問題一:以上程

6、序中的三個運算符重載都有錯誤,試改正過來,并分析該程序的輸出結(jié)果。2.2練習(xí)(二):1把2.1中第一道題的程序改造成采取友元函數(shù)重載方式來實現(xiàn)“+”運算符,并采取友元函數(shù)重載方式增加前置和后置“+”以及“-”運算符重載,并設(shè)計主函數(shù)來驗證重載運算符的用法。四、實驗過程練習(xí)1題目提供代碼與問題如下問題一:處的運算符重載,為什么該函數(shù)的返回值要設(shè)計成CComplex類型?答因為該函數(shù)就是CComplex類重載+運算,兩個CComplex相加后結(jié)果仍應(yīng)該為CComplex類問題二:處的運算符重載函數(shù)調(diào)用就相當(dāng)于“obj=operator+(obj1,obj2);”,但是為什么CComplex類中的運

7、算符重載函數(shù)只設(shè)計了一個參數(shù)?答 因為+運算符被重載為成員函數(shù),第一個參數(shù)由this指針隱含調(diào)用,所以再設(shè)置第二個參數(shù)即可原題目運行結(jié)果如下:練習(xí) 2題目提供源代碼如下:試著編譯結(jié)果如下:分析錯因:此代碼有三處錯誤錯誤1. +運算符重載為成員函數(shù),兩個參數(shù)應(yīng)該刪除一個,因為其中一個參數(shù)是由this指針隱含調(diào)用的錯誤2. 單目運算符+也是重載為成員函數(shù),應(yīng)該刪除參數(shù)錯誤3.-運算符重載為友元函數(shù),未在類中聲明;修改之后代碼如下:嘗試運行結(jié)果如下:更改成功練習(xí)3根據(jù)題意編寫代碼如下:嘗試運行結(jié)果如下:五、實驗總結(jié)實驗源代碼:練習(xí)(一)#include iostream.hclass CComple

8、xpublic:CComplex()real = 0;imag = 0;CComplex(int x,int y)real = x;imag = y;int real;int imag;CComplex operator + (CComplex obj1)/-CComplex obj2(real + obj1.real, imag + obj1.imag);return obj2;void main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; /-cout obj.real endl;co

9、ut obj.imag endl;/*問題一:處的運算符重載,為什么該函數(shù)的返回值要設(shè)計成CComplex類型?答因為該函數(shù)就是CComplex類重載+運算,兩個CComplex相加后結(jié)果仍應(yīng)該為CComplex類 問題二:處的運算符重載函數(shù)調(diào)用就相當(dāng)于“obj=operator+(obj1,obj2);”,但是為什么CComplex類中的運算符重載函數(shù)只設(shè)計了一個參數(shù)?答 因為+運算符被重載為成員函數(shù),第一個參數(shù)由this指針隱含調(diào)用,所以再設(shè)置第二個參數(shù)即可*/練習(xí)(二)#include iostream.hclass CComplexpublic:CComplex()real = 0.0

10、;imag = 0.0;CComplex(float x, float y)real = x;imag = y;CComplex operator + (CComplex &obj2)/錯誤1.此處運算符重載為成員函數(shù),一個參數(shù)由this指針隱含調(diào)用;CComplex obj3(real + obj2.real, imag + obj2.imag);return obj3;CComplex &operator+()/錯誤2.單目重載運算符+重載為成員函數(shù),此處參數(shù)應(yīng)刪除;real += 1;imag += 1;return *this;void print()coutreal+imagiend

11、l;friend CComplex &operator-(CComplex &x);/錯誤3.-重載為友元函數(shù),未在類中聲明;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+,

12、 obj3=;obj3.print();+obj3;coutafter+, obj3=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();練習(xí)(三)#include iostream.hclass CComplexpublic:CComplex()real = 0.0;imag = 0.0;CComplex(float x, float y)real = x;imag = y;friend CComplex operator + (CComplex &ob

13、j1,CComplex &obj2)/友元函數(shù)重載+運算符CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);return obj3;friend CComplex &operator+(CComplex &obj)/友元函數(shù)重載+前綴運算符+obj.real;+obj.imag;return obj;friend CComplex &operator+(CComplex &obj,int)/友元函數(shù)重載后綴+運算符CComplex temp=obj;/temp使用obj未更改前的值obj.real+;obj.imag+;re

14、turn temp;friend CComplex operator-(CComplex &x);/友元函數(shù)重載-前綴運算符friend CComplex &operator-(CComplex &x,int);/友元函數(shù)重載后綴-運算符void print()coutreal+imagiendl;private:double real;double imag;CComplex operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;CComplex &operator-(CComplex &x,int)CComplex temp=x;/temp使用x未更改前的值x.real-;x.imag-;return temp;void main()CComplex C1(1,1),C2(2,2),C3;coutC1= ; C1.print();coutC2= ; C2.print();coutBefore nC3= ; C3.print();C3=C1+

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論