关于#c++#的问题:1类外设计一个Circle类的友元函数,按照由小到大顺序输出三个圆的半径

定义平面上的一个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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632