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++实现点和圆的关系到此结束,期待你的鼓励和支持

关于C++类和对象深入探索之分文件编写点和圆的关系详解的文章就介绍至此,更多相关C++分文件编写内容请搜索编程宝库以前的文章,希望以后支持编程宝库

插入排序分为两种:直接插入排序&希尔排序 希尔排序1.基本思想希尔排序是在直接插入排序基础上的优化,属于非常牛掰的一个排序。核心思想:先进行预排序,让数组接近有序;直接插入排序预排序预 ...