2023.5.5 面向对象程序设计实验报告
实验项目名称:模板
一、实验目的
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;
}
热门相关:无量真仙 无限杀路 无限杀路 无限杀路 名门天后:重生国民千金