掌握组合类的定义和使用

  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计算两个圆之间圆心距离
// 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;

}