写在前面:
只有题目内容和代码,没有解释。
2013年:(仅供参考)
请按要求编写一个类Circle,用于描述一个圆形,并用给定的main函数测试Circle类的功能。Circle类的要求如下:
1.包含圆形编号、圆心x坐标、圆心y坐标和半径等数据成员。圆形编号为整形。生成第1个圆形对象时编号为1,生成第2个圆形对象时编号为2,以此类推。每构造一个新的圆形,对象编号为当前最大编号加1(如当前最大编号为5,则生成的这个新圆形的编号应该为6)。
2.是否需要其它数据成员,可视情况自行决定。提示:建议使用两个静态变量。一个静态变量用于记录当前圆形对象的个数,此变量的值可增大或减小;另一个静态变量用于记录已经生成的圆形对象的最大编号,此变量的值只会增大不会减小。
3.1个带有3个参数的构造函数。3个参数分别初始化圆形的圆心x坐标、圆心y坐标和半径等数据成员。提示:圆形对象的编号也需要初始化。
4.1个拷贝构造函数。提示:圆形对象的编号不能简单复制。
5.1个获取当前圆形对象数量的函数。提示:此函数建议为静态函数。
6.前自增运算符,对半径自增1。
7.后自增运算符,对半径自增1。
8.+运算符,用于将两个圆形加在一起,得到一个新的圆形。新圆形的圆心坐标是两个圆形坐标连线的中点,面积是两个圆形面积的和。提示:需要根据面积反算半径。
9.流输出运算,用于显示圆形的编号、圆心x坐标、圆心y坐标和半径、面积、周长。一个圆形的信息占1行。
10.析构函数。圆形对象销毁时,需要将当前圆形对象的数量减去1。
11.使用给定的main函数测试Circle类的功能。
题目给的main测试函数里面没有析构函数的测试,菜狗如我就只减了一下
//author CN.TTDragon #include<bits/stdc++.h> typedef long long ll; const ll mod=1e9+7; const ll maxn=1e5+7; const double pi=acos(-1); using namespace std; class Circle { private: int id; static int num,mx;//静态数据成员 double x,y,r; public: Circle(double a,double b,double c) { x=a; y=b; r=c; id=num+1; num++; if(num>mx) { mx++; } } Circle(const Circle &yuan) { x=yuan.x; y=yuan.y; r=yuan.r; num=yuan.num+1; id=num; if(num>mx) { mx++; } } ~Circle() { num--; } static get_num() { return num; } friend ostream& operator<<(ostream& o, const Circle& yuan1);//流输出写成友元函数 friend ostream& operator+(const Circle& yuan1); double getx() const { return x; } double gety() const { return y; } double getr() const { return r; } friend Circle & operator++(Circle& yuan1) { yuan1.r=yuan1.r+1; return yuan1; } friend Circle operator++(Circle& yuan,int b) { Circle yuan2(yuan); yuan.r=yuan.r+1; return yuan2; } }; int Circle::num =0; int Circle::mx =0; ostream& operator<<(ostream& o, const Circle& yuan1) { o<<yuan1.id<<" "<<yuan1.x<<" "<<yuan1.y<<" "<<yuan1.r<<" "<<2*pi*yuan1.r<<" "<<pi*yuan1.r*yuan1.r<<endl; } Circle operator+(const Circle& yuan1,const Circle& yuan2)//写的稀烂 { double sss=pi*yuan1.getr()*yuan1.getr()+pi*yuan2.getr()*yuan2.getr(); double rrr=sqrt(sss/pi); Circle new1((yuan2.getx()+yuan1.getx())/2,(yuan1.gety()+yuan2.gety())/2,rrr); return new1; } int main() { Circle c1( 1.12, 2.23, 3.34 ), c2( c1 ); cout << c1 << c2; cout << "Number of circles = " << Circle::get_num() << endl; Circle c3 = c1 + c2; cout << c3; cout << "Number of circles = " << Circle::get_num() << endl; cout << c1++; cout << ++c2; cout << c1; return 0; }
2014年:
请按要求编写一个类Timer,用于描述一个计时器,并用给定的main函数测试Timer类的功能。Timer类的要求如下:
- 该类数据成员包含分钟minute,秒second。均为整型。分钟和秒取值范围为0-59。注意:两个数据成员均为私有。
- 1个带有2个参数的构造函数,缺省值都为0。2个参数分别初始化计时器对象的分钟和秒值。注意:初始化值超过分钟和秒取值范围的自动设为0。
- 1个拷贝构造函数。
- 用常成员函数实现get_minute()/get_second(),返回minute和second值。
- 前自增运算符++重载。注意:先增加秒second值,如果超过59,秒值清零,分钟加1;如果分钟值超过59,分钟值清零。
- 后自增运算符++重载。注意事项同上。
- 重载减法运算符-,实现两个Timer相减,得到它们的时间差,时间差也是一个Timer对象;注意:先判断哪个Timer大,用大的减去小的,减法中利用1分钟=60秒。
- 写一个友元函数write(Timer &c, ofstream &os),将一个计时器对象写入到一个文件中,包括计时器的分钟和秒值,中间用“:”隔开。一个计时器的信息占1行。
- 流输出运算,用于显示计时器的分钟和秒值,中间用“:”隔开。一个计时器的信息占1行。
- 使用给定的main函数测试Timer类的功能。
//author CN.TTDragon #include<bits/stdc++.h> typedef long long ll; const ll mod=1e9+7; const ll maxn=1e5+7; const double pi=acos(-1); using namespace std; class timer { private: int m,s; public: timer(const timer &t); timer(int mm=0,int ss=0) { m=mm; s=ss; } int get_minute() { return m; } int get_second() { return s; } timer & operator++() { s++; if(s==60) { m++; s=0; } if(m==60) { m=0; } return (*this); } timer & operator++(int b) { timer temp(*this); s++; if(s==60) { m++; s=0; } if(m==60) { m=0; } return temp; } timer & operator-(const timer & t) { int tot=m*60+s-t.m*60-t.s; tot=abs(tot); tot=tot%3600; timer now1(tot/60,tot%60); return now1; } friend ostream& operator<<(ostream& o, const timer& tt) { o<<tt.m<<" : "<<tt.s<<endl; } friend void write(const timer &t, ofstream &os); }; timer::timer(const timer &t) { this->m=t.m; this->s=t.s; } void write(const timer & t,ofstream & os) { //os << t.get_minute() << ":" << t.get_second() << endl; os << t.m << ":" << t.s << endl; } int main() { ofstream os("timer.txt"); timer t1, t2(20, 59), t3( t2 ); cout << t1 << t2 << t3; timer* t4 = new timer(2,49); cout << t4->get_minute() <<" " << t4->get_second() << endl; delete t4; ++t1; cout << t1; t3++; cout << t3; timer t5 = t3 - t1; cout << t5; write(t1, os); write(t2, os); write(t3, os); write(t5, os); os.close(); return 0; }
以下是timer.txt
0:1 20:59 21:0 20:59
写在最后:
2020第二次测试加油。