上篇讲了如何使用c++类与对象实现判断点和圆的关系,这篇就把之前的封装起来。主要新建两个头文件circle.h、 point.h 和 两个源文件 circle.cpp 、point.cpp。
封装思路
头文件point.h
#pragma once
#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
class Point
{
public:
void setX(int x);
int getX();
void setY(int y);
int getY();
private:
int m_X;
int m_Y;
};
主要就是类内行为/函数变成只声名。
源文件point.cpp
//引用头文件point.h
#include"point.h"
void Point::setX(int x)
{
m_X = x;
}
int Point::getX()
{
return m_X;
}
void Point::setY(int y)
{
m_Y = y;
}
int Point::getY()
{
return m_Y;
}
首先把头文件的函数声明具体功能写出,然后声明一下函数作用域是point
头文件circle.h
同上
#include"point.h"
class Circle
{
public:
void set_R(int r);
int get_R();
void setCenter(Point center);
Point getCenter();
private:
int m_R;
Point m_Center;//圆心点类
};
这里圆类包含了一个点,所以要引头文件 #include"point.h"
源文件circle.cpp
同上
#include"point.h"
void Point::setX(int x)
{
m_X = x;
}
int Point::getX()
{
return m_X;
}
void Point::setY(int y)
{
m_Y = y;
}
int Point::getY()
{
return m_Y;
}
主函数
与上篇一样,不需要改动
void isInCircle(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.get_R() * c.get_R();
if (distance == rDistance)
{
cout << "点在圆上" << endl;
}
else if(distance > rDistance)
{
cout << "点在圆外" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
int main()
{
//创建圆
Circle c;
c.set_R(10);
Point center;//创建点——圆心
center.setX(10);//圆心横坐标
center.setY(0);//圆心纵坐标
c.setCenter(center);
//创建点
Point p;
p.setX(10);
p.setY(11);
isInCircle(c, p);
system("pause");
return 0;
}