5. 类和对象封装案例----点和圆位置关系(拆分文件)

#include <iostream>
using namespace std;

//根据点到圆心距离来判断
//点和园关系
//点类
class Circle
{
public:
    //设置x;
    void setx(int x)
   {
         m_x=x;
    }
    //获取x;
    void getx()
    {
        return x;
    }
    //设置y;
    void sety(int y)
   {
         m_y=y;
    }
    //获取y;
    void gety()
    {
        return y;
    }
private:
    int m_x; //半径
    int m_y;
};
//圆类
class Circle
{
public:
    //设置半径
    void setr(int r)
    {
        m_r=r;
    }
    //获取半径
    void getr()
    {
        return m_r;
    }
    //设置圆心
    void setcenter(Point center)
    {
        m_center=center;
    }
    //获取圆心
    Point getcenter()
    {
        return m_center;
    }
private:
    int m_r; //半径
    Point m_center; //圆心----->在类中可以让另一个类作为本来中的成员
};

//判断点和圆关系
void isisInCircle(Circle &c,Point &p)
{
    //计算两点之间的距离
   int distance=
     (c.getcenter().getx()-p.getx())*(c.getcenter().getx()-p.getx())
 +  (c.getcenter().gety()-p.gety())*(c.getcenter().gety()-p.gety());

    //计算半径平方
    int rdistance = c.getr()*c.getr();

    //判断关系
    if(distance == rdistance)
    {
        cout <<"点在圆上" <<endl;
    }
    else if(distance > rdistance)
    {
        cout <<"点在圆外" <<endl;
    }
    else
    {
        cout <<"点在圆内" <<endl;
    }
}

int main()
{
    //创建圆
    Circle c;
    c.setr(10);
    Point center;
    center.setx(10);
    center.sety(0);
    c.setcenter(center);

    //创建点
    Point p;
    p.setx(10);
    p.sety(10);

    //判断关系
    isisInCircle(c,p);

    system("pause");
    return 0;
}

 

由于在开发时类中类代码过于不便,采取多个文件写项目

(1)首先创建一个头文件,留住函数的声明及变量即可。

#pragma once   //防止头文件重复包含
#include <iostream>
using namespace std;

//根据点到圆心距离来判断
//点和园关系
//点类
class Circle
{
public:
    //设置x;
    void setx(int x);

    //获取x;
    void getx();

    //设置y;
    void sety(int y);

    //获取y;
    void gety();

private:
    int m_x; //半径
    int m_y;
};

 

(2)写一个分源文件编写实现代码

#include "ppoint.h"
//设置x;
void Point::setx(int x)  //由于是Point类中的成员函数,需要加上Point类作用域
{
    m_x=x;
}
//获取x;
void Point::getx()
{
    return x;
}
//设置y;
void Point::sety(int y)
{
    m_y=y;
}
//获取y;
void Point::gety()
{
    return y;
}

 

(3)Circle 类拆分文件同理如上。

(4)最后文件如下

#include <iostream>
using namespace std;
#include "point.h"
#include "circle.h"

//判断点和圆关系
void isisInCircle(Circle &c,Point &p)
{
    //计算两点之间的距离
   int distance=
     (c.getcenter().getx()-p.getx())*(c.getcenter().getx()-p.getx())
 +  (c.getcenter().gety()-p.gety())*(c.getcenter().gety()-p.gety());

    //计算半径平方
    int rdistance = c.getr()*c.getr();

    //判断关系
    if(distance == rdistance)
    {
        cout <<"点在圆上" <<endl;
    }
    else if(distance > rdistance)
    {
        cout <<"点在圆外" <<endl;
    }
    else
    {
        cout <<"点在圆内" <<endl;
    }
}

int main()
{
    //创建圆
    Circle c;
    c.setr(10);
    Point center;
    center.setx(10);
    center.sety(0);
    c.setcenter(center);

    //创建点
    Point p;
    p.setx(10);
    p.sety(10);

    //判断关系
    isisInCircle(c,p);

    system("pause");
    return 0;
}

 

上一篇:LeetCode 463 Island Perimeter 解题报告


下一篇:第四次作业