【C/C++】使用类和对象 设计点和圆的关系案例

news2024/9/24 5:30:50

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、创建点类
  • 二、创建设置、获取属性的函数
  • 三、创建全局函数
    • 题目分析
  • 四、测试执行
  • 全部完整代码
  • 注意类声明顺序

设计点类圆类,判断 点和圆的关系

在这里插入图片描述

一、创建点类

根据题目,先创建一个点类,属性有点的x、y坐标

并且为了实现“可控制的访问”,将属性的访问权限设置为private

如果直接设置成公有的,别人随意就能修改

class CPoint		//点类
{
private:
	//点的坐标
	double m_x;
	double m_y;
};

然后创建一个圆类,属性有圆的半径圆心坐标

由于圆心坐标是一个点类型的数据,可以直接使用点类CPoint创建一个点对象作为圆类中的属性

class CCricle			//圆形类
{
private:
	double m_r;			//圆的半径
	CPoint m_Center;	//圆心坐标

二、创建设置、获取属性的函数

根据点类的属性x、y坐标,创建对应的设置x、y坐标和获取x、y坐标的函数

访问权限为public

为了让类的使用者只能通过设计者提供的接口去修改类的属性

public:

	//设置x的坐标
	void setX(double x)
	{
		m_x = x;
	}
	//设置y的坐标
	void setY(double y)
	{
		m_y = y;
	}
	//获取x的坐标
	double getX()
	{
		return m_x;
	}
	//获取y的坐标
	double getY()
	{
		return m_y;
	}

根据圆类的属性半径、圆心点,创建对应的设置半径、圆心点和获取半径、圆心点的函数

public:
	//设置半径
	void setm_r(double r)
	{
		m_r = r;
	}
	//获取半径
	double getm_r()
	{
		return m_r;
	}
	//设置圆心点
	void setCenter(CPoint center)
	{
		m_Center = center;
	}
	//获取圆心点
	CPoint getCenter()
	{
		return m_Center;
	}
};

三、创建全局函数

题目分析

点和圆的关系可以有以下几种情况

点和圆的关系

  • 点到圆心的距离 == 半径 点在圆上
  • 点到圆心的距离 > 半径 点在圆外
  • 点到圆心的距离 < 半径 点在圆内

点到圆心的距离 == (x1-x2)2 +(y1-y2)2m_r2相比

根据题目要求创建行为函数:

  • 获取点到圆心距离

通过点到圆的坐标平方相减计算 方便后续计算进行平方

//获取点到圆心距离
double juli(CPoint point, CPoint center)
{
	return (point.getX() - center.getX()) * (point.getX() - center.getX())
		+ (point.getY() - center.getY()) * (point.getY() - center.getY());				//(x1 - x2)^2 + (y1 - y2)^2
}
  • 判断点和圆的关系

通过(x1-x2)^2^ +(y1-y2)^2^ m_r^2^进行比较,判断点和圆的关系

//判断点和圆的关系
void isRelation(CPoint& point, CCricle& cricle)
{
	double distance = (point.getX() - cricle.getCenter().getX()) * (point.getX() - cricle.getCenter().getX())
		+ (point.getY() - cricle.getCenter().getY()) * (point.getY() - cricle.getCenter().getY());
	double rr = (cricle.getm_r()) * (cricle.getm_r());

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

四、测试执行

在主函数中使用CCricle圆类创建一个圆对象,再通过调用类成员函数setm_r()设置圆的半径

设置圆心时,由于圆心被定义为点类,使用点类CPoint创建圆心对象,并setCenter()设置圆心及坐标

调用全局函数isRelation()判断点和圆的关系

在这里插入图片描述
在这里插入图片描述

全部完整代码

#include <iostream>
#include <string>
using namespace std;
/*
点和圆的关系
点到圆心的距离 == 半径  点在圆上
点到圆心的距离  > 半径  点在圆外
点到圆心的距离  < 半径  点在圆内
点到圆心的距离 == (x1-x2)~2+(y1-y2)~2  与 m_r~2相比
*/
class CPoint		//点类
{
private:
	//点的坐标
	double m_x;
	double m_y;

public:

	//设置x的坐标
	void setX(double x)
	{
		m_x = x;
	}
	//设置y的坐标
	void setY(double y)
	{
		m_y = y;
	}
	//获取x的坐标
	double getX()
	{
		return m_x;
	}
	//获取y的坐标
	double getY()
	{
		return m_y;
	}
};

class CCricle			//圆形类
{


private:
	double m_r;			//圆的半径
	CPoint m_Center;	//圆心坐标

public:
	//设置半径
	void setm_r(double r)
	{
		m_r = r;
	}
	//获取半径
	double getm_r()
	{
		return m_r;
	}
	//设置圆心点
	void setCenter(CPoint center)
	{
		m_Center = center;
	}
	//获取圆心点
	CPoint getCenter()
	{
		return m_Center;
	}
};

//获取点到圆心距离
double juli(CPoint point, CPoint center)
{
	return (point.getX() - center.getX()) * (point.getX() - center.getX())
		+ (point.getY() - center.getY()) * (point.getY() - center.getY());				//(x1 - x2)~2 + (y1 - y2)~2
}
//判断点和圆的关系
void isRelation(CPoint& point, CCricle& cricle)
{
	double distance = (point.getX() - cricle.getCenter().getX()) * (point.getX() - cricle.getCenter().getX())
		+ (point.getY() - cricle.getCenter().getY()) * (point.getY() - cricle.getCenter().getY());
	double rr = (cricle.getm_r()) * (cricle.getm_r());

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



int main()
{
	//创建圆
	CCricle cricle1;

	//设置半径
	cricle1.setm_r(5.0);

	//设置圆心
	CPoint center1;
	center1.setX(2.0);
	center1.setY(4.0);
	cricle1.setCenter(center1);

	//创建点
	CPoint point1;
	point1.setX(1.0);
	point1.setY(10.0);


	isRelation(point1, cricle1);

	return 0;
}

注意类声明顺序

如果一个类使用了另一个类定义对象,被包含的类的声明顺序应该在包含他的类之前

定义class CPoint 点类 需要在CCricle使用CPoint定义对象之前 CPoint m_Center; //圆心坐标

否则会出现m_Center未知重写说明符的编译错误


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

误删除boot目录 修复办法

误删除boot目录 修复办法 本次演示系统为kylin-v10-sp3-20230324&#xff0c;kernel&#xff1a;4.19.90-52.22.v2207.ky10.x86_64 文章目录 误删除boot目录 修复办法1.报错现象2.正常机器boot目录结构3.误删除boot目录4.故障修复挂载光盘&#xff0c;进入救援模式 5.非正常情况…

mysql8.0.26忘记密码后重置(centos8)

1、查看配置文件地址 mysql --help|grep my.cnf 2、编辑/etc/my.cnf配置文件 vim /etc/my.cnf增加跳过密码配置 [mysqld] skip-grant-tables 3、重启mysql service mysqld restart4、修改密码 use mysql; update user set authentication_string where userroot; FLUSH pr…

NoSQL之Redis配置与优化(初级)理论较多

目录 一、关系数据库与非关系型数据库 1、 关系型数据库 2、 非关系型数据库 二、关系型数据库和非关系型数据库区别 1、 数据存储方式不同 2、 扩展方式不同 3、 对事务性的支持不同 三、非关系型数据库产生背景 1、可用于应对Web2.0纯动态网站类型的三高问题&#xf…

大数据Doris(五十一):Export语法和结果

文章目录 Export语法和结果 一、语法 二、结果 Export语法和结果 一、语法 Export 需要借助 Broker 进程访问远端存储&#xff0c;不同的 Broker 需要提供不同的参数&#xff0c;这里以导出到HDFS为例介绍Export 写法&#xff0c;也可以通过"help export "命令查…

Azure CLI - Premium SSD V1磁盘迁移至Premium SSD V2

目录 1.从服务器卸载Premium SSD V1 磁盘 2.创建Premium SSD V1磁盘snapshot 3.创建Premium SSD V2磁盘 4.挂载Premium SSD V2磁盘到服务器 已经在生产使用的Premium SSD V1磁盘&#xff0c;通过制作快照后&#xff0c;购买Premium SSD V2磁盘。 1.从服务器卸载Premium SSD…

Intellij IDEA detected unusually high memory use

一、IDEA如图 二、解决 2.1 修改IDEA的内存堆 运行IntelliJ IDEA的Java虚拟机&#xff08;JVM&#xff09;分配一些预定义的内存量。默认值取决于平台。如果您遇到速度减慢&#xff0c;可能需要增加内存堆。 为运行IDE分配的堆大小与编译应用程序的堆大小不同。如果要为编译代…

服务行业的企业所得税高,这是为何,该如何解决?

服务行业的企业所得税高&#xff0c;这是为何&#xff0c;该如何解决&#xff1f; 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 服务行业的发展历程&#xff0c;源远流长。它是为了满足我们生活中的需要应运而生&#xff0c;大家眼…

广州华锐互动:建筑施工VR虚拟仿真实训系统

VR技术在施工现场安全教育中有着广泛的应用。随着VR技术的不断发展&#xff0c;越来越多的企业开始将其应用于施工现场安全教育中&#xff0c;以提高工人的安全意识和应对能力。 传统的施工现场安全教育往往需要大量的时间和人力物力投入&#xff0c;而且效果并不理想.而VR技术…

生物数据下载

目录 1. 获取数据下载的地址 2. 生物数据常用的下载站点 1、核酸数据库 2、非编码RNA数据库 &#xff08;1&#xff09;.非编码小RNA数据库 &#xff08;2&#xff09;.长非编码RNA数据库&#xff1a; &#xff08;3&#xff09;.非编码RNA家族数据库 &#xff08;4&a…

C++ day41

1、总结类和结构体的区别 结构体中是变量和函数&#xff1b;类中是成员属性(成员变量)、成员方法(成员函数)/行为类的成员变量和成员函数的默认访问权限是私有的&#xff1b;结构体的成员变量和成员函数的默认访问权限是公开的类创建一个对象后&#xff0c;对该对象的任何修改…

2022年全国硕士研究生入学统一考试管理类专业学位联考数学试题——纯题目版

2022 年全国硕士研究生入学统一考试管理类专业学位联考数学试题 一、问题求解&#xff1a;第 1∼15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分。下列每题给出的 A、B、C、D、E 五个选项中&#xff0c;只有一项是符合试题要求的&#xff0c;请在答&#xff0e;题&#…

PC市场的寒冬,该如何看待?

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

prometheus告警发送到钉钉群机器人的全部署流程

前置条件&#xff1a;prometheus安装完成&#xff0c;创建钉钉群机器人&#xff0c;我这里使用的是指定ip的方式 定义告警规则 修改Prometheus配置文件prometheus.yml,添加以下配置&#xff1a; rule_files:- /usr/local/prometheus/rules/*.rulesalerting:alertmanagers:- s…

Spring、Bean 创建 和 使⽤

目录 前言 1、创建 Spring 项目 1.1、创建一个 Maven 项目 1.2、在 Maven 项目中&#xff0c;添加 Spring 框架支持&#xff08;spring-context&#xff0c;spring-beans&#xff09; 1.2.1添加依赖 1.2.2 配置国内源 1.2.3 添加maven 1.3、创建一个启动类 和 main 方法…

Mybatis 操作数据库的基本 CRUD 以及查询操作详析

目录 1. 什么是 MyBaits &#xff1f; 2. 搭建 MyBaits 环境 3. 了解 MyBaits 设计模式 MyBaits 操作数据库&#xff1a; 前置工作&#xff1a; &#xff08;1&#xff09;建库建表 &#xff08;2&#xff09; 添加实体类 &#xff08;3&#xff09;添加 Mapper 接口 &#xff…

CPU上下文切换原理剖析

CPU上下文 CPU上下文其实是一些环境正是有这些环境的支撑&#xff0c;任务得以运行&#xff0c;而这些环境的硬件条件便是CPU寄存器和程序计数器。CPU寄存器是CPU内置的容量非常小但是速度极快的存储设备&#xff0c;程序计数器则是CPU在运行任何任务时必要的&#xff0c;里面…

亿级数据过滤算法----布隆过滤器

在程序的世界中&#xff0c;布隆过滤器是程序员的一把利器&#xff0c;利用它可以快速地解决项目中一些比较棘手的问题。如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。 布隆过滤器&#xff08;Bloom Filter&#xff09;是 1970 年由布隆提出的。它…

水站桶装水订水小程序

水站桶装水订水小程序正式上线&#xff0c;支持多种商品展示形式&#xff0c;会员卡、积分、分销等功能&#xff0c;有需要的老板可以先看演示&#xff01;​​​​​​​​​​​​​​​​​​​​​

Java框架之spring 的 messaging

写在前面 本文看下spring message相关的内容。 1&#xff1a;Message&#xff1f;Messaging&#xff1f; Message是消息的意思&#xff0c;是一个名词。而Messaging是一个动名词&#xff0c;是将消息发送出去的意思&#xff0c;因此&#xff0c;我们的消息系统是messaging s…

SuperMap iServer 扩展账户信息合规度校验规则

作者&#xff1a;lisong 目录 功能简介配置文件详情扩展和配置流程 功能简介 SuperMap iServer 11i&#xff08;2023&#xff09; 新增了扩展账户信息合规度校验规则的能力&#xff0c;您可以灵活定制满足自身项目需求的用户名、密码合规度校验规则&#xff0c;用于校验您创建…