湖南某高校一根小稻草 2019-06-04 15:11 采纳率: 100%
浏览 769
已采纳

掌握组合类的定义和使用

  1. 要求 (1) 定义一个圆类Circle类,圆心对应一个点类Point类: 在main函数中生成两个Circle对象,计算每个Circle对象的面积,并计算两个Circle对象圆心的距离,最后判断两个圆的状态:相离,相切,相交,同心圆。

2
.#include

#include

using namespace std;

class Point{

public:

double x,y;

//在此定义构造函数

//在屏幕上打印Point对象的函数

//计算这个点到另外一个点的距离的函数

};

class Circle{

public:

Point location; //圆心的坐标

double r; //圆半径

public:

//构造函数

//两个圆的位置关系函数 stateOfCircle(Circle c)

//计算圆面积的函数 area( )

//计算两个圆的圆心距离 distance(Point p)

void print(){ }

};

int main(){

//定义两个矩形对象和Point对象 //测试每一个成员函数

return 0;

}




```设计提示
Circle类提示如下:

(1)     Circle类中一定包含一个Point类成员对象,还需要一个半径值。

(2)     Circle类中要有一个判断两个圆状态的函数 stateOfCircle(Circle c)。

(3)     Circle类中要有一个计算圆面积的函数 area( )。

(4)     Point类需要有一个计算距离的函数distance(Point p)。


测试代码提示如下:

(1) 定义两个个Circle对象

(2) 调用Circle的对象方法stateOfCircle判断这两个圆的位置关系

(3) 调用Circle的对象方法area计算圆面积

(4) 调用Point的对象方法distance计算两个圆之间圆心距离
  • 写回答

1条回答

  • threenewbee 2019-06-04 18:29
    关注
    // Q764558.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    enum State
    {
        相离, 相切, 相交, 同心圆, 嵌套
    };
    
    class Point {
    
    public:
    
        double x, y;
    
        //在此定义构造函数
        Point(double a, double b)
        {
            x = a;
            y = b;
        }
    
        //在屏幕上打印Point对象的函数
        void PrintPoint()
        {
            cout << "Point X=" << x << ",Y=" << y << endl;
        }
    
        //计算这个点到另外一个点的距离的函数
        double Distance(Point p)
        {
            return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
        }
    
    };
    
    class Circle {
    
    public:
    
        Point location; //圆心的坐标
    
        double r; //圆半径
    
    public:
    
        //构造函数
        Circle(double x, double y, double r):location(x, y), r(r)
        {
        }
    
        //两个圆的位置关系函数 stateOfCircle(Circle c)
        State stateOfCircle(Circle c)
        {
            if (distance(c.location) > c.r + r)
                return 相离;
            if (distance(c.location) == c.r + r)
                return 相切;
            if (distance(c.location) == (c.r > r ? c.r - r : r - c.r))
                return 相切;
            if (location.x == c.location.x && location.y == c.location.y)
                return 同心圆;
            if (distance(c.location) <= c.r + r)
                return 相交;
        }
    
        //计算圆面积的函数 area( )
        double area()
        {
            return r * r* 3.1416;
        }
    
        //计算两个圆的圆心距离 distance(Point p)
        double distance(Point p)
        {
            return location.Distance(p);
        }
    
        void print() 
        { 
            cout << "Circle:X=" << location.x << ",Y=" << location.y << ",R=" << r << endl;
        }
    
    };
    
    int main() {
    
        //定义两个矩形对象和Point对象 //测试每一个成员函数
        //(1) 定义两个个Circle对象
        Circle c1(10, 10, 3);
        Circle c2(12, 12, 4);
        //(2) 调用Circle的对象方法stateOfCircle判断这两个圆的位置关系
        cout << c1.stateOfCircle(c2) << endl;
        //(3) 调用Circle的对象方法area计算圆面积
        cout << c1.area() << endl;
        cout << c2.area() << endl;
        //(4) 调用Point的对象方法distance计算两个圆之间圆心距离
        cout << c1.location.Distance(c2.location) << endl;
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包