【C++】封装:练习案例-点和圆的关系

练习案例:点和圆的关系

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

思路:

1)创建点类point.hpoint.cpp

2)创建圆类circle.hcircle.cpp

3)点和圆的关系判断void isIncircle(Circle &c,Point &p)

点到圆心的距离 == 圆心 (点在圆上)

点到圆心的距离 < 圆心 (点在圆内)

点到圆心的距离 > 圆心 (点在圆外)

示例代码

我们将点类用point.cpppoint.h实现。将圆类用circle.cppcircle.h实现。

点类头文件point.h

#pragma once
#include<iostream>
using namespace std;
class Point
{
   
public:
	//设置x坐标
	void setX(int x);
	
	//读取x坐标
	int getX();
	
	//设置y坐标
	void setY(int y);
	
	//读取y坐标
	int getY();
	
private:
	int m_x;
	int m_y;
};

点类代码实现point.c

#include"point.h"

//设置x坐标
void Point::setX(int x)
{
   
	m_x = x;
}
//读取x坐标
int Point::getX()
{
   
	return m_x;
}
//设置y坐标
void Point::setY(int y)
{
   
	m_y = y;
}
//读取y坐标
int Point::getY()
{
   
	return m_y;
}

圆类头文件circle.h

#pragma once
#include<iostream>
#include"point.h"
using namespace std;

class Circle
{
   
public:
	//设置半径
	void setR(int r);
	
	//读取半径
	int getR();
	
	//设置圆心
	void setCenter(Point center);
	
	//获取圆心
	Point getCenter();
	
private:
	int m_R; //半径
	//在类中可以让另一个类,作为本类中的成员
	Point m_center; //圆心

};

圆类代码实现circle.cpp

#include"circle.h"

//设置半径
void Circle::setR(int r)
{
   
	m_R = r;
}
//读取半径
int Circle::getR()
{
   
	return m_R;
}
//设置圆心
void Circle::setCenter(Point center)
{
   
	m_center = center;
}
//获取圆心
Point Circle::getCenter()
{
   
	return m_center;
}

主文件点和圆的关系.cpp

#include<iostream>
#include"circle.h"
#include"point.h"
using namespace std;
//点和圆的关系案例

//判断点和圆的关系
void isIncircle(Circle &c,Point &p)
{
   
	//计算两点距离的平方
	int dist =
	(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
	(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
	
	//计算半径的平方
	int rDistance = c.getR() * c.getR();

	//判断两点距离的平方和半径的平方的关系
	if (dist == rDistance)
	{
   
		cout << "点在圆上" << endl;
	}
	else if (dist > rDistance)
	{
   
		cout << "点在圆外" << endl;
	}
	else
	{
   
		cout << "点在圆内" << endl;
	}
}
int main()
{
   
	//创建圆
	Circle c1;
	c1.setR(10);
	Point center;
	center.setX(10);
	center.setY(0);
	c1.setCenter(center);

	//创建点
	Point p1;
	p1.setX(10);
	p1.setY(9);

	Point p2;
	p2.setX(10);
	p2.setY(10);

	Point p3;
	p3.setX(10);
	p3.setY(11);

	//判断关系
	isIncircle(c1, p1);
	isIncircle(c1, p2);
	isIncircle(c1, p3);

	system("pause");
	return 0;
}

运行结果

我们设置了一个圆,圆心为(10,0),半径为10。
我们设置了三个点(10,9)(10,10)(10,11)。

点在圆内
点在圆上
点在圆外

相关推荐

  1. C#面向对象——封装封装案例示例

    2023-12-18 11:14:03       19 阅读
  2. c# MathNet.Numerics 拟合使用案例

    2023-12-18 11:14:03       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 11:14:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 11:14:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 11:14:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 11:14:03       18 阅读

热门阅读

  1. unity中实现Edge浏览器鼠标手势的功能

    2023-12-18 11:14:03       46 阅读
  2. Android Studio导出Excel的一些感悟

    2023-12-18 11:14:03       33 阅读
  3. 什么是计算机网络?计算机网络基础知识

    2023-12-18 11:14:03       39 阅读
  4. LeetCode第376场周赛

    2023-12-18 11:14:03       40 阅读
  5. 技术面试斗智斗勇II

    2023-12-18 11:14:03       44 阅读
  6. Joysticks

    2023-12-18 11:14:03       50 阅读
  7. VIM ——Vimtutor 个人总结【从入门到精通】

    2023-12-18 11:14:03       44 阅读
  8. TCP或许不是“可靠”的

    2023-12-18 11:14:03       50 阅读