2023.5.5 面向对象程序设计实验报告
  CVvCpQuyHCX4 2023年11月02日 33 0
C++

实验项目名称:模板

一、实验目的

1、熟练掌握函数模板和类模板的定义格式。

2、熟练运用函数模板和类模板解决实际问题。

二、实验内容

1、复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个函数模板

template < class T >

double dist(T a, T b)

对int,float,Complex或者其他类型的数据,返回两个数据的间距。

以上类名和函数模板的形式,均须按照题目要求,不得修改

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

输入样例:

1 2 5

3 2 4 5 9

2 2.2 9.9

0

 

输出样例:

3

5.83095

7.7

 

 

2、两个类如下设计:类Time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。

要求设计一个函数模板

template <class T>

T maxn(T x[], int len);

对int,float,time和date或者其他类型的数据,返回最大值。

main主函数有如下变量的定义:

int intArray[100];

double douArray[100];

Time timeArray[100];

Date dateArray[100];

其中,hh = 3600 ss, mm = 60 ss, year = 365 day, month = 30 day,对于Time和Date类型,数据在转换成ss或者day后进行运算。

输入格式:

每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为Date型数据,输入Date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。

输出格式:

对每次输入,输出一个最大值。

样例输入:

1 4 5 9 3 7 0

2 4.4 5.5 6.9 3.2 2.7 0

3 18 21 22 18 20 31 18 21 49 0

4 2013 5 14 2013 5 15 2013 4 1 0

-1

样例输出:

9

6.9

18 21 49

2013 5 15

 

 

题解:

第一个实验的代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;  3  4 class Complex {  5 int real,vir;  6 public:  7 Complex(int a,int b):real(a),vir(b){}  8 ~Complex(){}  9 10 double operator - (Complex b1){ 11 return sqrt(((double)real-b1.real)*((double)real-b1.real)+((double)vir-b1.vir)*((double)vir-b1.vir)); 12  } 13 14 }; 15 16 template<class T> 17 double dist(T a,T b){ 18 double c=a-b; 19 if(c<0) c=-c; 20 return c; 21 } 22 23 int main(){ 24 25 int op; 26 while(cin>>op,op){ 27 if(op==1){ 28 int a,b; 29 cin>>a>>b; 30 cout<<dist(a,b)<<'\n'; 31  } 32 else if(op==2){ 33 float a,b; 34 cin>>a>>b; 35 cout<<dist(a,b)<<'\n'; 36  } 37 else{ 38 int x1,x2,y1,y2; 39 cin>>x1>>y1>>x2>>y2; 40  Complex a(x1,y1),b(x2,y2); 41 cout<<dist(a,b)<<'\n'; 42  } 43  } 44 45 return 0; 46 }

第二个实验代码:

#include<bits/stdc++.h>
using namespace std; class Time{ public: int hh,mm,ss; Time(int a=0,int b=0,int c=0):hh(a),mm(b),ss(c){} ~Time(){} bool operator > (Time t2){ int s1=hh*3600+mm*60+ss; int s2=t2.hh*3600+t2.mm*60+t2.ss; if(s1>=s2) return true; else return false; } }; class Date{ public: int yy,mm,dd; Date(int a=0,int b=0,int c=0):yy(a),mm(b),dd(c){} ~Date(){} bool operator > (Date d2){ int d11=yy*365+mm*30+dd; int d22=d2.yy*365+d2.mm*30+d2.dd; if(d11>=d22) return true; else return false; } }; template<class T> T maxn(T x[],int len){ T maxx=x[1]; for(int i=2;i<=len;++i){ if(x[i]>maxx){ maxx=x[i]; } } return maxx; } int main(){ ios::sync_with_stdio(false),cin.tie(0); int op; while(cin>>op,op!=-1){ if(op==1){ int x,intArray[100],idx=1; while(cin>>x,x){ intArray[idx++]=x; } int maxx=maxn(intArray,idx-1); cout<<maxx<<'\n'; } else if(op==2){ float x,floatArray[100]; int idx=1; while(cin>>x,x){ floatArray[idx++]=x; } float maxx=maxn(floatArray,idx-1); cout<<maxx<<'\n'; } else if(op==3){ int hh,mm,ss,idx=1; Time TimeArray[100]; while(cin>>hh,hh){ cin>>mm>>ss; TimeArray[idx].hh=hh; TimeArray[idx].mm=mm; TimeArray[idx++].ss=ss; } Time maxx=maxn(TimeArray,idx-1); cout<<maxx.hh<<' '<<maxx.mm<<' '<<maxx.ss<<'\n'; } else{ int yy,mm,dd,idx=1; Date DateArray[100]; while(cin>>yy,yy){ cin>>mm>>dd; DateArray[idx].yy=yy; DateArray[idx].mm=mm; DateArray[idx++].dd=dd; } Date maxx=maxn(DateArray,idx-1); cout<<maxx.yy<<' '<<maxx.mm<<' '<<maxx.dd<<'\n'; } } return 0; }



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   82   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   58   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   44   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   62   0   0 C++
CVvCpQuyHCX4