欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > 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++实现点和圆的关系到此结束,期待你的鼓励和支持

上一篇:C语言堆与二叉树的顺序结构与实现

栏    目:C代码

下一篇:C语言数组全面总结梳理

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

本文地址:http://www.codeinn.net/misctech/207640.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有