高等程序設計實驗報告推薦_第1頁
高等程序設計實驗報告推薦_第2頁
高等程序設計實驗報告推薦_第3頁
高等程序設計實驗報告推薦_第4頁
高等程序設計實驗報告推薦_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

高等程序設計實驗報告實驗名稱

實驗

12

運算符重載(

2)

系 別姓 名

學 號

班 級實驗時間

實驗地點

實驗成績一、 實驗目的及要求進一步理解運算符重載,運用成員函數和友元函數等方法實現運算符的重載。二、 實驗環境及相關情況(包含使用軟件、實驗設備、主要儀器及材料等)硬件設備:聯網的個人計算機操作系統:Windowsxp編譯系統:DevC++三、 實驗內容及步驟(包含簡要的實驗步驟流程)1、重載函數調用運算符 (),將以下的二維數組的下標表示方法:chessBoard[row][column] 改為常用的表示方法:chessBoard(row,column)2、重載下標運算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。3、開發多項式類 Polynomial,多項式的每一項用數組表示,每項包含一個系數和一個指數。例如:2x4的指數為4,系數為2。請開發一個完整的 Polynomial 類,包括構造函數、析構函數以及 "get"函數和"set"函數。該類還要提供下述重載的運算符(分別使用成員函數和友元函數) :1)重載加法運算符+,將兩個多項式相加;2)重載減法運算符-,將兩個多項式相減;3)重載賦值運算符=,將一個多項式賦給另外一個多項式;4)重載乘法算符*,將兩個多項式相乘;5)重載加法賦值運算符 +=、減法賦值運算符 -=以及乘法賦值運算符 *=。4.設計一個日期類 Date,,要求:1)包含年(year)、月(month)和日(day)私有數據成員。2)包含構造函數,重載關于一日期加上天數的加法運算符+、重載關于一日期減去天數的減加運算符-、重載輸出運算符<<與輸入運算符>>等。提示:由于各C++編譯器對于重載輸入 /出運算符為友元的兼容性都存在問題, 最好重載輸入/出運算符不聲明為成員函數與友元函數,而聲明一般函數,為編程更方便,可增加一些成員函數,比如:voidSetYear(inty);//設置年intSetMonth(intm);//設置月intSetDay(intd);//設置日intGetYear()const;//返回年intGetMonth()const;//返回月intGetDay()const;//返回日staticintIsLeapyear(inty);//判斷年份y是否為潤年staticintGetDays(inty);//年份y的天數staticintGetDays(constDate&d);//日期d當前月份的天數staticintDateToNum(constDate&d);//返回從公元1年1月1日起的天數staticDateNumToDate(intn);//由從公元1年1月1日起的天數返回日期潤年條件:年份能被4整除,并且年份不能被100整除,或者年份能被400整除潤年天數:366平年天數:365潤年2月份天數:29平年2月份天數:285.設計一個時間類 Time,要求:1)包含時(hour)、分(minute)和秒(second)私有數據成員。2)包含構造函數,重載關于一時間加上另一時間的加法運算符+、重載關于一時間減去另一時間的減加運算符 -、重載輸出運算符<<與輸入運算符>>等。提示:可仿照第 4題編程實現,可將時間轉換成秒數,將秒數轉成時間進行輔助編程。時間轉換成秒數:秒數 = 時*3600+ 分*60+ 秒秒數轉換成時間:時=秒數/3600分=(秒數-時*3600)/60秒=秒數%60為編程更方便,可增加一些成員函數,比如:voidSetHour(inthh);//設置小時voidSetMinute(intmm);//設置分鐘voidSetSecond(intss);//設置秒intGetHour()const;//返回小時intGetMinute()const;//返回分鐘intGetSecond()const;//返回秒四、實驗結果(包括程序或圖表、結論陳述、數據記錄及分析等,可附頁)1、重載函數調用運算符 (),將以下的二維數組的下標表示方法:chessBoard[row][column] 改為常用的表示方法:chessBoard(row,column)代碼實現:#include<iostream>#include<conio.h>usingnamespacestd;classshuzu{intchessBoard[8][8];public:shuzu(){for(inti=0;i<8;i++)for(intj=0;j<8;j++)chessBoard[i][j]=i+j;}intoperator()(inta,intb){returnchessBoard[a][b];}};intmain(){shuzua;cout<<"輸出(6,7)="<<a(6,7)<<endl;cout<<"矩陣:"<<endl;for(inti=0;i<8;i++){for(intj=0;j<8;j++)cout<<a(i,j)<<"\t";cout<<endl;}getch();return0;}結果截圖:2、重載下標運算符使之返回集合中最大的元素、 次最大的元素以及第三大的元素。3、開發多項式類 Polynomial,多項式的每一項用數組表示,每項包含一個系數和一個指數。例如: 2x4的指數為4,系數為2。請開發一個完整的 Polynomial 類,包括構造函數、析構函數以及"get"函數和"set"函數。該類還要提供下述重載的運算符(分別使用成員函數和友元函數) :1)重載加法運算符 +,將兩個多項式相加;2)重載減法運算符 -,將兩個多項式相減;3)重載賦值運算符 =,將一個多項式賦給另外一個多項式;4)重載乘法算符*,將兩個多項式相乘;5)重載加法賦值運算符 +=、減法賦值運算符 -=以及乘法賦值運算符 *=。代碼實現:#include<iostream>#include<conio.h>usingnamespacestd;classJ{private:inta[5];public:J(ints[]){for(inti=0;i<5;i++)a[i]=s[i];}voidpaixu(){for(inti=0;i<4;i++){for(intj=0;j<4-i;j++){if(a[j]>a[j+1]){inttemp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}intoperator[](intb){returna[b];}};intmain(){ints[5];cout<<"請輸入5個數:"<<endl;for(inti=0;i<5;i++){cin>>s[i];}j(s);j.paixu();cout<<"最大的元素、次最大的元素以及第三大的元素依次為:"<<j[4]<<","<<j[3]<<","<<j[2]<<endl;getch();return0;}結果截圖:4.設計一個日期類 Date,,要求:1)包含年(year)、月(month)和日(day)私有數據成員。2)包含構造函數,重載關于一日期加上天數的加法運算符+、重載關于一日期減去天數的減加運算符-、重載輸出運算符<<與輸入運算符>>等。提示:由于各C++編譯器對于重載輸入/出運算符為友元的兼容性都存在問題,最好重載輸入/出運算符不聲明為成員函數與友元函數,而聲明一般函數,為編程更方便,可增加一些成員函數,比如:voidSetYear(inty);//設置年intSetMonth(intm);//設置月intSetDay(intd);//設置日intGetYear()const;//返回年intGetMonth()const;//返回月intGetDay()const;//返回日staticintIsLeapyear(inty);//判斷年份y是否為潤年staticintGetDays(inty);//年份y的天數staticintGetDays(constDate&d);//日期d當前月份的天數staticintDateToNum(constDate&d);//返回從公元1年1月1日起的天數staticDateNumToDate(intn);//由從公元1年1月1日起的天數返回日期潤年條件:年份能被 4整除,并且年份不能被 100整除,或者年份能被 400整除潤年天數:366平年天數:365潤年2月份天數:29平年2月份天數:28(1)程序實現#include"iostream.h"#include<conio.h>classDate{public:Date(inta=0,intb=0,intc=0);voidSet_Date(inta,intb,intc);voidGet_Date();Dateoperator+(int);Dateoperator-(int);friendostream&operator<<(ostream&,Date&);friendistream&operator>>(istream&,Date&);private:intyear,mounth,date,m;};Date::Date(inta,intb,intc){year=a;mounth=b;date=c;m=1;}voidDate::Set_Date(inta,intb,intc){year=a;mounth=b;date=c;}voidDate::Get_Date(){if(m==1)cout<<year<<"年"<<mounth<<"月"<<date<<"日"<<endl;elsecout<<"剛才輸入的天數不符合要求 !"<<endl;}DateDate::operator+(inta){if(a>28){m=0;return*this;}else{if((year%400==0)||((year%4==0)&&(year%100!=0))){if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11)){if((date+a)<=30)date=date+a;else{date=date+a-30;mounth++;}}else{if(mounth==2){if((date+a)<=29)date=date+a;else{date=date+a;mounth++;}}//處理2月else{if((date+a)<=31)date=date+a;else{date=date+a-31;if(mounth==12){year++;mounth=1;}elsemounth++;}}}}else{if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11)){if((date+a)<=30)date=date+a;else{date=date+a-30;mounth++;}}else{if(mounth==2){if((date+a)<=28)date=date+a;else{date=date+a-28;mounth++;}}else{if((date+a)<=31)date=date+a;else{date=date+a-31;if(mounth==12){year++;mounth=1;}elsemounth++;}}}}return*this;}}DateDate::operator-(inta){if(a>28){m=0;return*this;}else{if((year%400==0)||((year%4==0)&&(year%100!=0))){if((mounth==5)||(mounth==7)||(mounth==10)||(mounth==12)){if(date>=a)date=date-a;else{date=date-a+30;mounth--;}}else{if(mounth==3){if(date>=a)date=date-a;else{date=date-a+29;mounth--;}}else{if(date>=a)date=date-a;else{date=date-a+31;if(mounth==1){year--;mounth=12;}elsemounth--;}}}}else{if((mounth==5)||(mounth==7)||(mounth==10)||(mounth==12)){if(date>=a)date=date-a;else{date=date-a+30;mounth--;}}else{if(mounth==3){if(date>=a)date=date-a;else{date=date-a+28;mounth--;}}else{if(date>=a)date=date-a;else{date=date-a+31;if(mounth==1){year--;mounth=12;}elsemounth--;}}}}return*this;}}ostream&operator<<(ostream&output,Date&a){cout<<a.year<<" 年"<<a.mounth<<"月"<<a.date<<" 日"<<endl;returnoutput;}istream&operator>>(istream&input,Date&a){cout<<"年:";cin>>a.year;cout<<"月:";cin>>a.mounth;cout<<"日:";cin>>a.date;returninput;}intmain(){Datea,b,c;intx,y,z;cout<<"請輸入第一個日期 :"<<endl;cout<<"年:";cin>>x;cout<<"月:";cin>>y;cout<<"日:";cin>>z;a.Set_Date(x,y,z);c=a;cout<<"請輸入第二個日期 :"<<endl;cin>>b;cout<<"請輸入需要加上的天數 :"<<endl;cin>>z;a=a+z;cout<<"日期"<<c<<"加上"<<z<<"天"<<"得到的日期為:"<<endl;a.Get_Date();a=c;cout<<"請輸入需要減去的天數 :"<<endl;cin>>z;cout<<" 日期"<<b<<"減去"<<z<<"天"<<"得到的日期為:"<<endl;b=b-z;b.Get_Date();getch();return0;}(2)結果截圖5.設計一個時間類 Time,要求:1)包含時(hour)、分(minute)和秒(second)私有數據成員。2)包含構造函數,重載關于一時間加上另一時間的加法運算符+、重載關于一時間減去另一時間的減加運算符-、重載輸出運算符<<與輸入運算符>>等。提示:可仿照第 4題編程實現,可將時間轉換成秒數,將秒數轉成時間進行輔助編程。時間轉換成秒數:秒數 = 時*3600+ 分*60+ 秒秒數轉換成時間:時=秒數/3600分=(秒數-時*3600)/60秒=秒數%60為編程更方便,可增加一些成員函數,比如:voidSetHour(inthh);//設置小時voidSetMinute(intmm);//設置分鐘voidSetSecond(intss);//設置秒intGetHour()const;//返回小時intGetMinute()const;//返回分鐘intGetSecond()const;//返回秒代碼實現:#include<iostream>#include<conio.h>usingnamespacestd;classTime{inthour,minute,second,sall;public:Time();Timeoperator+(Timea);Timeoperator-(Timea);Timeoperator<<(Time&a);Timeoperator>>(Time&a);voidSetHour(inthh); // 設置小時voidSetMinute(intmm); // 設置分鐘voidSetSecond(intss); // 設置秒intGetHour()const; // 返回小時intGetMinute()const; // 返回分鐘intGetSecond()const; // 返回秒intGetSall()const;};Time::Time(){second=0;hour=0;minute=0;sall=0;}TimeTime::operator+(Timea){Timetemp;temp.sall=sall+a.sall;temp.hour=temp.sall/3600;temp.minute=(temp.sall-3600*temp.hour)/60;temp.second=temp.sall%60;returntemp;}TimeTime::operator-(Timea){Timetemp;temp.sall=sall-a.sall;temp.hour=temp.sall/3600;temp.minute=(temp.sall-3600*temp.hour)/60;temp.second=temp.sall%60;returntemp;}TimeTime::operator<<(Time&a){minute=a.minute;hour=a.hour;second=a.second;sall=a.sall;return*this;}TimeTime::operator>>(Time&a){a.minute=minute;a.second=second;a.hour=hour;a.sall=sall;returna;}voidTime::SetHour(inthh){

// 設置小時hour=hh;}voidTime::SetMinute(intmm){

// 設置分鐘minute=mm;}voidTime::SetSecond(intss){

// 設置秒second=ss;sall=3600*hour+60*minute+second;}intTime::GetHour()const{

// 返回小時returnhour;}intTime::GetMinute()const // 返回分鐘{returnminute;}intTime::GetSecond()const // 返回秒{returnsecond;}intTime::GetSall()const{returnsall;}intmain(){Timet1,t2,t3,t4,t5,t6,t7,t8;ints1,s2,h1,h2,m1,m2;cout<<"請輸入時分秒(1):";cin>>h1>>m1>>s1;cout<<"請輸入時分秒(2):";cin>>h2>>m2>>s2;t1.SetHo

溫馨提示

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

評論

0/150

提交評論