實驗10多態(tài)一_第1頁
實驗10多態(tài)一_第2頁
實驗10多態(tài)一_第3頁
實驗10多態(tài)一_第4頁
實驗10多態(tài)一_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、內(nèi)蒙古科技大學(xué)信息工程學(xué)院計算機系面向?qū)ο蟪绦蛟O(shè)計實驗報告姓名張國強學(xué)號1667159127班級軟件一班實驗日期第 17周(星期 三 )6月 21 日第 一節(jié)項目號、實驗名稱實驗10 多態(tài)(一)實驗要求(任課教師提供)一、實驗?zāi)康?理解靜態(tài)聯(lián)編和動態(tài)聯(lián)編的概念;2理解掌握成員函數(shù)方式運算符重載;3理解掌握友元函數(shù)方式運算符重載;4理解掌握+、-、=運算符的重載。二、實驗內(nèi)容 2.1練習(一):1理解下面的程序,并在VC+6.0下運行查看結(jié)果,回答程序后面的問題。#include "iostream.h"class CComplexpublic:CComplex()real

2、= 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 <

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

4、mag = y;CComplex operator + (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()cout<<real<<"+"<<imag<<"i&quo

5、t;<<endl;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);cout<<"obj1="obj1.print();cout<<"obj2="obj2.print();CComplex obj3 = obj1 + obj2;cout<<&

6、quot;befor+, obj3="obj3.print();+obj3;cout<<"after+, obj3="obj3.print();-obj3;cout<<"after-, obj3="obj3.print();CComplex obj4 = +obj3;cout<<"obj4="obj4.print();問題一:以上程序中的三個運算符重載都有錯誤,試改正過來,并分析該程序的輸出結(jié)果。2.2練習(二):1把2.1中第一道題的程序改造成采取友元函數(shù)重載方式來實現(xiàn)“+”運算符,并采

7、取友元函數(shù)重載方式增加前置和后置“+”以及“-”運算符重載,并設(shè)計主函數(shù)來驗證重載運算符的用法。實驗內(nèi)容(由學(xué)生填寫)實驗一:問題一:處的運算符重載,為什么該函數(shù)的返回值要設(shè)計成CComplex類型?問題二:處的運算符重載函數(shù)調(diào)用就相當于“obj=operator+(obj1,obj2);”,但是為什么CComplex類中的運算符重載函數(shù)只設(shè)計了一個參數(shù)?回答:處obj = obj1+obj2; 相當于obj=obj1.operator+(obj2),因為obj是CComplex類型,而返回值正是obj所以返回值要設(shè)計成CComplex類型。處 因為此函數(shù)是類內(nèi)的成員函數(shù),有一個隱含的this

8、指針,所以只需一個參數(shù)就可以。試驗二: 第一個錯誤:如果重載+運算符且函數(shù)有兩個參數(shù),則只能聲明為類的友元函數(shù),不能聲明為類的成員函數(shù)。第二個錯誤:重載單目運算符+為類的成員函數(shù),不需要參數(shù)。因為它的操作數(shù)是函數(shù)調(diào)用者。第三個錯誤:單目運算符函數(shù)沒有在類內(nèi)聲明,如果想要傳參,則必須將此函數(shù)聲明為類的友元函數(shù)。修改以后代碼如下:#include<iostream>using namespace std;class CComplexpublic:CComplex()real = 0.0;imag = 0.0;CComplex(float x, float y) real = x;ima

9、g = y;friend CComplex operator + (CComplex &obj1, CComplex &obj2);CComplex & operator+()real += 1;imag +=1;return *this;CComplex & operator-() real -= 1;imag -= 1;return *this;void print()cout<<real<<"+"<<imag<<"i"<<endl;private:float

10、 real;float imag;CComplex operator + (CComplex & obj1, CComplex & obj2) CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);return obj3;int main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);cout<<"obj1="obj1.print();cout<<"obj2="obj2.print();CComplex

11、 obj3 = obj1 + obj2;cout<<"befor+, obj3="obj3.print();+obj3;cout<<"after+, obj3="obj3.print();-obj3;cout<<"after-, obj3="obj3.print();CComplex obj4 = +obj3;cout<<"obj4="obj4.print();實驗三:代碼如下:#include<iostream>using namespace std;c

12、lass CComplexpublic:CComplex()real = 0;imag = 0;CComplex(int x,int y)real = x;imag = y;friend CComplex operator +(CComplex x1,CComplex x2);friend CComplex operator +(CComplex &x);friend CComplex operator +(CComplex &x,int); friend CComplex operator -(CComplex &x); friend CComplex operato

13、r -(CComplex &x,int); void print1() cout<<"相加結(jié)果(real,imag)="<<"("<<real<<","<<imag<<")"<<endl; void print2()cout<<"real="<<real<<" "cout<<"imag="<<imag<

14、;<endl;private:int real;int imag; CComplex operator +(CComplex x1,CComplex x2) CComplex x3(x1.real + x2.real, x1.imag + x2.imag); return x3; CComplex operator +(CComplex &x) x.real +; x.imag +; return x; CComplex operator +(CComplex &x,int) CComplex t=x; x.real +; x.imag +; return t; CCom

15、plex operator -(CComplex &x) x.real -; x.imag -; return x; CComplex operator -(CComplex &x,int) CComplex t=x; x.real -; x.imag -; return t; int main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj3= obj1+obj2;CComplex obj4(100,30);CComplex obj5(100,30);obj3.print1();cout<<&qu

16、ot;obj4后置+以后:"(obj4+).print2(); cout<<"obj4后置-以后:" (obj4-).print2();cout<<"obj5前置+以后:"(+obj5).print2();cout<<"obj5前置-以后:"(-obj5).print2();聲明為類的成員函數(shù)實驗一二都涉及到,這里重點說一下單目運算符+的前置與后置。前置單目運算符和后置單目運算符的最主要區(qū)別是函數(shù)的形參,后置單目運算符帶一個int 型的參數(shù),但它只起區(qū)分作用。實驗總結(jié)(由學(xué)生填寫)老師問試驗二錯誤的原因回答:第一個錯誤:如果重載+運算符且函數(shù)有兩個參數(shù),則只能聲明為類的友元函數(shù),不能聲明為類的成員函數(shù)。第二個錯誤:重載單目運算符+為類的成員

溫馨提示

  • 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

提交評論