定义平面上的一个Circle类,其属性为圆心的点坐标和半径(radius),成员函数getArea(计算圆的面积;
1类外设计一个Circle类的友元函数,比较三个圆半径的大小,按照由小到大顺序输出三个圆的半径;
2.类外再设计一个Circle类的友元函数,根据圆心x坐标大小进行排序。主函数构造三个对象进行测试。
类内定义,类外实现友元函数。代码如下:
#include <iostream>
#include <string>
using namespace std;
class Circle
{
private:
double x,y;
double radius;
public:
Circle(double xx=0,double yy=0,double r=0)
{
x = xx;
y = yy;
radius = r;
}
void setCenter(double xx,double yy)
{
x = xx;
y = yy;
}
void setRadius(double r)
{
radius = r;
}
double getX(){return x;}
double getY(){return y;}
double getRadius(){return radius;}
double getArea()
{
return 3.14 * radius * radius;
}
friend void Compare(Circle c1,Circle c2,Circle c3);
friend void SortByx(Circle c[],int n);
};
void Compare(Circle c1[],int n)
{
int i,j;
Circle tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(c1[j].getRadius() > c1[j+1].getRadius())
{
tmp = c1[j];
c1[j] = c1[j+1];
c1[j+1] = tmp;
}
}
}
//输出
cout <<"根据半径从小到大排序:"<< endl;
for(i=0;i<n;i++)
{
cout << c1[i].getRadius() <<" ";
}
cout <<endl;
}
void SortByx(Circle c1[],int n)
{
int i,j;
Circle tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(c1[j].getX() > c1[j+1].getX()) //根据x从小到大排序
{
tmp = c1[j];
c1[j] = c1[j+1];
c1[j+1] = tmp;
}
}
}
//输出
cout << "根据x排序:"<<endl;
for(i=0;i<n;i++)
{
cout <<"("<<c1[i].getX()<<","<<c1[i].getY()<<"),r="<<c1[i].getRadius()<<endl;
}
cout <<endl;
}
int main()
{
Circle cc[10];
int n=3;
double x,y,r;
for(int i=0;i<n;i++)
{
cout <<"请输入第"<<i+1<<"个圆的圆心和半径:";
cin >> x>>y>>r;
cc[i].setCenter(x,y);
cc[i].setRadius(r);
}
//根据半径排序并输出
Compare(cc,n);
//根据x排序并输出
SortByx(cc,n);
//输出面积
for(int i=0;i<n;i++)
{
cout <<"("<<cc[i].getX()<<","<<cc[i].getY()<<"),r="<<cc[i].getRadius()<<"的面积:"<<cc[i].getArea()<<endl;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!