C++题目 帮忙做一下

请按要求编写一个类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函数(注意:不得修改main函数!对main函数每修改一处,总分扣2分,最多扣10分。)

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;
}

#include <iostream>
#include <math.h>
using namespace std;
class Circle
{
public:
Circle(double x,double y,double r);
Circle(double x,double y,double r,unsigned id);
Circle(const Circle&);
~Circle();
Circle& operator++();
Circle operator++(int);
static unsigned get_num();
Circle operator+(const Circle&) const;
friend const ostream& operator<<(const ostream& os,const Circle& c);
private:
double x;
double y;
double r;
unsigned id;
static unsigned count;
static unsigned maxid;
};
const ostream& operator<<(const ostream& os,const Circle& c)
{
cout << "圆形的编号" << c.id << ",圆心x坐标" << c.x << ",圆心y坐标" <<c.y << ",半径" << c.r << ",面积" << c.r * c.r * 3.1415f << ",周长" << 2 * c.r * 3.1415f << endl;
return os;
}
unsigned Circle::count = 0;
unsigned Circle::maxid = 0;
unsigned Circle::get_num()
{
return count;
}
Circle::Circle(double x,double y,double r,unsigned id):x(x),y(y),r(r),id(id)
{
count++;
}
Circle::Circle(double x,double y,double r):x(x),y(y),r(r)
{
id = ++maxid;
count++;
}
Circle::Circle(const Circle& c):x(c.x),y(c.y),r(c.r)
{
id = ++maxid;
count++;
}
Circle::~Circle()
{
count--;
}
Circle& Circle::operator++()
{
r ++;
return *this;
}
Circle Circle::operator++(int)
{
r++;
return Circle(x,y,--r,id);;
}
Circle Circle::operator+(const Circle& c) const
{
return Circle((x + c.x)/2,(y + c.y)/2,sqrt(r * r + c.r * c.r));
}
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;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-22
这个问题算不难,但很啰嗦,帮你写出来吧:
#include<iostream>
#include<cmath>
using namespace std;

double const PI=3.1415926;

class Circle;
ostream& operator<<(ostream& out,Circle &c);

class Circle{
int no;
double x,y,r;
static int count;
static int maxno;
public:
Circle(double px=0,double py=0,double pr=1);
Circle(Circle &c);
~Circle(){ count--; }
static int get_num(){ return count; }
Circle& operator++();
Circle operator++(int);
Circle operator+(Circle &c);
friend ostream& operator<<(ostream& out,Circle &c);
};
int Circle::count=0;
int Circle::maxno=0;
Circle::Circle(double px,double py,double pr){
x=px, y=py, r=pr;
maxno++;
no=maxno;
count++;
}
Circle::Circle(Circle &c){
x=c.x, y=c.y, r=c.r;
maxno++;
no=maxno;
count++;
}
Circle& Circle::operator++(){
r++;
return *this;
}
Circle Circle::operator++(int){
Circle tc(*this);
r++;
return tc;
}
Circle Circle::operator+(Circle &c){
Circle tc;
tc.x=(x+c.x)/2;
tc.y=(y+c.y)/2;
tc.r=sqrt(r*r+c.r*c.r);
return tc;
}
ostream& operator<<(ostream& out,Circle &c){
out <<c.no <<": (" <<c.x <<"," <<c.y <<"), "
<<c.r <<", " <<PI*c.r*c.r <<", " <<2*PI*c.r <<endl;
return out;
}

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;
}本回答被提问者和网友采纳
相似回答