【C++】类和对象的应用案例 2 - 点和圆的关系

本文通过C++展示了如何使用类和对象来创建点和圆的实例,进行点在圆内的判断。首先定义了Point和Circle类,然后提供了代码示例和优化方案,包括将类的声明和实现分开到不同的文件中。最后,用构造函数重写了代码,提高了代码的可读性和效率。
摘要由CSDN通过智能技术生成

        欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。


目录

1、缘起

2、分析

3、示例代码 1 

4、代码优化 

4.1、point.h 

4.2、point.c 

4.3、circle.h 

4.4、circle.c 

4.4、main.c 

5、示例代码 2 

6、总结 


1、缘起

        在 C++ 中,类和对象可以用来构建有趣的应用程序。一个生动形象且吸引人的案例是点和圆的关系。通过创建一个 Point 类 表示点的坐标,以及一个 Circle 类 表示圆的属性和行为,我们可以实现各种有趣的操作,如计算圆的面积、判断点是否在圆内等。这个案例展示了如何利用类和对象的概念在编程中创造出有趣和实用的应用。、

2、分析

设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系。

点和圆关系判断: 

点到圆心的距离  == 半径        点在圆上;

点到圆心的距离  >  半径         点在圆外;

点到圆心的距离  <  半径         点在圆内;

点到圆心的距离公式:

\sqrt{(x1-x2)^2+(y1-y2)^{2}}

3、示例代码 1 

#include<iostream>
#include<string>

using namespace std;

//创建一个点类
class Point
{
public:
	//行为
	//设置 x 坐标
	void setX(int x)
	{
		c_x = x;
	}

	//设置 y 坐标
	void setY(int y)
	{
		c_y = y;
	}

	//获取 x 坐标
	int getX()
	{
		return c_x;
	}

	//获取 y 坐标
	int getY()
	{
		return c_y;
	}

private:
	int c_x;
	int c_y;
};

//创建一个圆类
class Circle
{
public:
	//行为
	//设置半径
	void setR(int r)
	{
		c_r = r;
	}

	//设置圆心
	void setCenter(Point center)
	{
		c_center = center;
	}

	//获取半径
	int getR()
	{
		return c_r;
	}

	//获取圆心
	Point getCenter()
	{
		return c_center;
	}

private:
	//圆的半径
	int c_r;

	//圆的圆心
	Point c_center;
};

//全局函数判断点和圆的关系
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 r_distance = c.getR() * c.getR();

	if (distance == r_distance)
	{
		cout << "点在圆上" << endl;
	}
	if (distance < r_distance)
	{
		cout << "点在圆内" << endl;
	}
	if (distance > r_distance)
	{
		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);

	//判断点和圆的关系
	isInCircle(c, p);

	cout << endl;
	system("pause");
	return 0;
}	

4、代码优化 

        在实际开发中,我们不会把所有的类都写在同一文件中。我们通常会把一个类进行分文件编写。比如在头文件中写声明,在源文件中写实现。

4.1、point.h 

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

using namespace std;

class Point
{
public:
	//行为
	//设置 x 坐标
	void setX(int x);

	//设置 y 坐标
	void setY(int y);

	//获取 x 坐标
	int getX();

	//获取 y 坐标
	int getY();

private:
	int c_x;
	int c_y;
};

4.2、point.c 

#include "point.h"

//设置 x 坐标
void Point::setX(int x)
{
	c_x = x;
}

//设置 y 坐标
void Point::setY(int y)
{
	c_y = y;
}

//获取 x 坐标
int Point::getX()
{
	return c_x;
}

//获取 y 坐标
int Point::getY()
{
	return c_y;
}

4.3、circle.h 

#pragma once
#include "point.h"

//创建一个圆类
class Circle
{
public:
	//行为
	//设置半径
	void setR(int r);

	//设置圆心
	void setCenter(Point center);

	//获取半径
	int getR();

	//获取圆心
	Point getCenter();

private:
	//圆的半径
	int c_r;

	//在类中可让另一个类作为本来中的成员
	Point c_center;  //圆心
};

4.4、circle.c 

#include "circle.h"

//创建一个圆类
//行为
//设置半径
void Circle::setR(int r)
{
	c_r = r;
}

//设置圆心
void Circle::setCenter(Point center)
{
	c_center = center;
}

//获取半径
int Circle::getR()
{
	return c_r;
}

//获取圆心
Point Circle::getCenter()
{
	return c_center;
}

4.4、main.c 

#include<iostream>
#include<string>
#include"point.h"
#include"circle.h"

using namespace std;

//全局函数判断点和圆的关系
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 r_distance = c.getR() * c.getR();

	if (distance == r_distance)
	{
		cout << "点在圆上" << endl;
	}
	if (distance < r_distance)
	{
		cout << "点在圆内" << endl;
	}
	if (distance > r_distance)
	{
		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(12);

	//判断点和圆的关系
	isInCircle(c, p);

	cout << endl;
	system("pause");
	return 0;
}

5、示例代码 2 

利用 构造函数初始化列表 的知识点重写上述代码。

#include<iostream>
#include<string>

using namespace std;

#include<iostream>
#include<string>

using namespace std;

//定义一个点类
class Point
{
public:
	Point(int x, int y)
	{
		p_x = x;
		p_y = y;
	}

	//获取 x 的值
	int getX()
	{
		return p_x;
	}

	//获取 y 的值
	int getY()
	{
		return p_y;
	}

private:
	int p_x;
	int p_y;
};

//定义一个圆类
class Circle
{
public:
	Circle(int r,int x, int y):c_r(r),c_center(x,y)
	{
		
	}

	//设置圆心
	void setCenter(Point center)
	{
		c_center = center;
	}

	//获取半径
	int getR()
	{
		return c_r;
	}

	//获取圆心
	Point getCenter()
	{
		return c_center;
	}

private:
	int c_r;
	Point c_center;
};

//全局函数判断点和圆的关系
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 r_distance = c.getR() * c.getR();

	if (distance == r_distance)
	{
		cout << "点在圆上" << endl;
	}
	if (distance < r_distance)
	{
		cout << "点在圆内" << endl;
	}
	if (distance > r_distance)
	{
		cout << "点在圆外" << endl;
	}
}

int main()
{
	//定义一个圆类
	//第一个参数是圆的半径,第二,三个参数是圆心
	Circle c(10,10,0); 

	//创建一个点对象
	Point p(10, 10);

	isInCircle(c, p);

	cout << endl;
	system("pause");
	return 0;
}

 

6、总结 

        本期的分享总结就到这里了,如果有疑问的小伙伴,我们在评论区交流嗷~~~,笔者必回,我们下期再见啦 !!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aperion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值