当前位置:主页 > 软件编程 > C代码 >

C++类和对象深入探索之分文件编写点和圆的关系详解

时间:2022-07-13 08:27:28 | 栏目:C代码 | 点击:

上一篇封装直达

创建圆心类

point.h

#pragma once
#include<iostream>
using namespace std;
//创建圆心类
class Point
{
public:
	void setM_x(int x);
	int  getM_x();
	void setM_y(int y);
	int  getM_y();
private:
	int m_x;
	int m_y;
};

把圆心的横纵坐标设为私有,公共属性写了两对成员方法,用来给圆心属性赋值和读取,这里只写了方法的声明,具体实现将在point.cpp文件实现。

point.cpp

#include"point.h"
void Point::setM_x(int x)
{
	m_x = x;
}
int Point::getM_x()
{
	return m_x;
}
void Point::setM_y(int y)
{
	m_y = y;
}
int Point::getM_y()
{
	return m_y;
}

这个文件就是point头文件中定义成员方法的具体实现了,引入point.h头文件,在四个方法的返回值类型和方法名面前加::,表示属于圆心类的方法,然后完成赋值和取值的实现。

创建圆类

Circle.h

#pragma once
#include<iostream>
#include "point.h"
using namespace std;
//创建 Circle 类
class Circle
{
public:
	void  setM_r(int r);
	int   getM_r();
	void  setCenter(Point &center);
	Point getCenter();
private:
	int m_r;
	Point m_center;
};

这里和point.h类似,设置了圆心和圆半径的属性并设置为私有;在公共权限下定义为半径赋值和取值的方法;对于圆心,我引入point.h的头文件,在圆类中创建了圆心m_center,设置圆心方法中采用引用传参,将圆心类完成赋值的圆心传入到圆类中;获取圆心的途径是通过 getCenter 方法调用point 类中的 get 方法。

Circle.cpp

#include"Circle.h"
void Circle::setM_r(int r)
{
	m_r = r;
}
int Circle::getM_r()
{
	return m_r;
}
void Circle::setCenter(Point &center)
{
	m_center = center;
}
Point Circle::getCenter()
{
	return m_center;
}

引入Circle.h头文件,将.h的方法完成具体实现。

判断点圆关系函数

void relative(Circle& c, Point& p)
{
	//圆心到点距离的平方为distance
	int distance =
	(c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) +
	(c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y());
	//半径的平方 rDistance
	int rDistance = c.getM_r() * c.getM_r();
	if (distance > rDistance)       cout << "点在圆外" << endl;
	else if (distance == rDistance) cout << "点在圆上" << endl;
	else                            cout << "点在圆内" << endl;
}

数学上点和圆的关系是圆心到点的距离和半径的比较,这里我把等号两边平方,比较两个数据的大小即可;若距离大于半径,点在圆外;距离等于半径,点在圆上;距离小于半径,点在圆内;relative 函数传入Circle 类和 Point 类的对象,分别计算圆心到点距离的平方 distance和半径的平方 rDistance,利用多重If语句输出不同结果即可。

最终实现

#include"Circle.h"
void relative(Circle& c, Point& p)
{
	//圆心到点距离的平方为distance
	int distance =
	(c.getCenter().getM_x() - p.getM_x()) * (c.getCenter().getM_x() - p.getM_x()) +
	(c.getCenter().getM_y() - p.getM_y()) * (c.getCenter().getM_y() - p.getM_y());
	//半径的平方 rDistance
	int rDistance = c.getM_r() * c.getM_r();
	if (distance > rDistance)       cout << "点在圆外" << endl;
	else if (distance == rDistance) cout << "点在圆上" << endl;
	else                            cout << "点在圆内" << endl;
}
int main()
{
	int x = 0, y = 0, a = 0, b = 0, r = 0;
	Circle C;
	Point center, P;
	cout << "圆心横坐标 x 为:"; cin >> x; cout << endl;
	cout << "圆心纵坐标 y 为:"; cin >> y; cout << endl;
	center.setM_x(x);
	center.setM_y (y);
	C.setCenter(center);
	cout << "此圆 半径  r 为:"; cin >> r; cout << endl;
	C.setM_r(r);
	cout << "点横坐标 x 为:"; cin >> a; cout << endl;
	cout << "点纵坐标 y 为:"; cin >> b; cout << endl;
	P.setM_x(a);
	P.setM_y(b);
	relative(C, P);
}

主函数创建Circle类对象 C,和Point 类对象 P,center;通过set方法设置center点的坐标并传入C的setCenter方法中,这样圆心数据赋值完成,然后利用相同方法对圆半径以及点赋值,最后调用relative函数比较即可,附上三种运行结果,如下:

总结

这个案例应该是很好理解的,总共是五个文件,两个.h三个.cpp。这样看着非常的舒服和整洁,建议大家在做稍微复杂的项目或者案例时可以多利用分文件编写,那么C++实现点和圆的关系到此结束,期待你的鼓励和支持

您可能感兴趣的文章:

相关文章