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++分文件编写内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++深入探索类和对象之封装及class与struct的区别

    目录 封装的意义 访问权限 class和struct的区别 成员属性私有 案例练习 封装的意义 封装是C++三大面向对象之一 意义: 1.设计类的时候,属性和行为写在一起,表现事物 2.类在设计时,可以把属性和行为放在不同的权限下,加以控制 语法:class 类名 {访问权限:属性 / 行为}: 示例1:设计一个直角三角形,并求解他的面积 #include<iostream> using namespace std; //class代表设计一个类,后面跟着的是类名 class taiAngle

  • C++深入探究类与对象之对象模型与this指针使用方法

    目录 C++对象模型和this指针 1 成员变量和成员函数分开存储 2 this指针概念 3 空指针访问成员函数 4 const修饰成员函数 C++面向对象的三大特性为:封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和行为 例如: ​ 人可以作为对象,属性有姓名.年龄.身高.体重…,行为有走.跑.跳.吃饭.唱歌… ​ 车也可以作为对象,属性有轮胎.方向盘.车灯…,行为有载人.放音乐.放空调… ​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类 C++对象模型和th

  • C++学习笔记之类与对象详解

    目录 前言: 1.访问限定符: [问题]C++中 struct和class的区别是什么? 2.封装 [问题]在类和对象的阶段,我们只研究类的封装特性,那什么是封装呢? 3.类的定义与声明 [问题]函数调用的问题 4.类的作用域 5.类的实例化 6.类的分类 总结 前言: 1.C 语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数逐步调用解决问题. 2.C++是基于面向对象的,关注的是对象,蒋一件事情拆分成不同的对象,靠对象之间的交互完成. 举个例子:外卖系统 面向过程是下单.接单.送餐的

  • C++类与对象的详细说明

    目录 类的引入 类的定义 1.声明和定义全部放在类体中 2.声明放在头文件,定义放在源文件中 类的访问限定符号及封装 访问限定符 封装 类的实例化 类对象模型 this指针 this指针的特性 总结 类的引入 在引入类之前,先来回忆一下C语言中的结构体.结构体是一种自定义类型,可以在其中定义变量,如我们所熟悉的日期结构体: struct Date { int year; int month; int day; }; 而在C++中,结构体被升级成了类,结构体中不仅可以定义成员变量,也可以定义成员函

  • C++中的类与对象深度解析

    目录 初始化列表 引论 初始化列表 explicit关键字 引论 explicit关键字使用 static成员 友元 引论 友元 内部类 基础概念 内部类的使用 补充 析构顺序例题 总结 初始化列表 引论 //初始化列表的引出 class B { public: B() { cout << "我是B的构造函数" << endl; } private: int _b; }; class A { public: A() { cout << "我

  • C++深入讲解类与对象之OOP面向对象编程与封装

    目录 1.面向对象编程 2.面向过程性编程和面向对象编程 3.类的引入 4.类的定义 4.1类的两种定义方式 4.1.1声明和定义全部放在类体中 4.2.2.声明和定义不放在类体中 5.类的访问限定符及封装 5.1 访问限定符 5.2封装 6.类的作用域 7.类的实例化 8.类对象模型 如何计算类对象的大小 面向过程编程也叫结构化编程.虽然结构化编程的理念提高了程序的清晰度,可靠性,并且方便维护.但它再编写大型的程序时,仍然面临这巨大的挑战,OOP(面向对象编程)提供了一种新的方法.与强调算法的

  • C++深入探究类与对象之友元与运算符重载

    目录 友元 1 全局函数做友元 2 类做友元 3 成员函数做友元 运算符重载 1 加号运算符重载 2 左移运算符重载 3 递增运算符重载 4 赋值运算符重载 5 关系运算符重载 6 函数调用运算符重载 友元 生活中你的家有客厅(Public),有你的卧室(Private),客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的好闺蜜好基友进去. 在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术. 友元的目的就是让一个函数

  • C++初阶教程之类和对象

    目录 类和对象<上> 1. 类的定义 2. 类的封装 2.1 访问限定修饰符 2.2 类的封装 3. 类的使用 3.1 类的作用域 3.2 类的实例化 4. 类对象的存储 5. this 指针 5.1 this 指针的定义 5.2 this 指针的特性 类和对象<中> 1. 构造函数 1.2 构造函数的定义 2.2 构造函数的特性 2. 析构函数 2.1 析构函数的定义 3. 拷贝构函数 3.1 拷贝构造函数的定义 3.2 拷贝构造函数的特性 4. 运算符重载 4.1 运算符重载的

  • 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; }; 把圆心的横纵坐标设为私有,公共

  • python中类与对象之间的关系详解

    在搜索平台上关于类以及对象都已经被霸屏了,主要的问题无非就是两个,一个是理解二者,另一个就是理解二者之间的使用关系,对于小编来说,两者统一跟大家讲清,相信也很难被大家消化,这不,给大家想出来比较好理解的方式,用最简单的话,快速交大家上手,可别不信,简单易懂内容如下. 二者关系: 女生口红是一种类,但是mac.完美日记是口红里的个体,被称作是对象.这就是二者之间的关系,有人理解成包含情况也可以. 定义类/对象: class 类名(父类): class Human(object): pass man

  • java接口语法以及与类的关系详解

    1.语法: public interface 接口名{} public class 类名 implements 接口名{} interface +接口名 implements: 实现 创建接口对象: Jumping p=new Cat(); 接口对象可以访问: Cat类中的成员变量和成员方法 但接口要写跟类一样的定义方法,接口对象才能引用类的方法 在interface里面的变量都是public static final 的.所以你可以这样写: public static final int i=

  • flask路由分模块管理及自定义restful响应格式详解

    目录 一.flask路由分模块管理 1.1.使用蓝图 1.2.使用flask_restful 二.自定义flask_restful响应格式 一.flask路由分模块管理 1.1.使用蓝图 在flask中可以使用蓝图Blueprint来进行创建路由进行分模块. 具体操作,我们可以在项目根目录下创建一个controller文件夹来存储分模块的路由. 在controller文件夹里创建product_controller.py,在里面如下写法引入蓝图,并且注册蓝图: from flask import

  • JavaScript策略模式利用对象键值的映射关系详解

    目录 引言 1.策略模式的极简实现 2.策略模式的简单案例 (1)工具函数 (2)提示样式 总结 引言 策略模式指的是,定义一系列的算法,把它们一个个的封装起来,通过传递一些参数,使他们可以相互替换. 举个周末从家去咖啡馆的例子: 从家去咖啡馆,有跑步.骑行和漫步的方式.也就是说,从家到咖啡馆,有三种策略可选择. 1.策略模式的极简实现 通过对象的键值映射关系,定义策略和具体实现之间的关系: var strategies = { A: xxx, B: yyy, C: zzz } 其中,A.B和C

  • Python编程中类与类的关系详解

    类与类的关系 依赖关系 # 依赖关系: 将一个类的类名或者对象传给另一个类的方法中. class Elephant: def __init__(self, name): self.name = name def open(self,r1): # print(ref1) print(f'{self.name}默念三声: 芝麻开门') r1.open_door() def close(self): print('大象默念三声:芝麻关门') class Refrigerator: def __init

  • Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    1.java标准异常概述 Throwable表示任何可以作为异常被抛出的类,有两个子类Error和Exception.从这两个类的源代码中可以看出,这两个类并没有添加新的方法,Throwable提供了所以方法的实现.Error表示编译时和系统错误.Exception是可以被抛出的异常类.RuntimeException继承自Exception(如NullPointerException),表示运行时异常,JVM会自动抛出. 2.自定义异常类 自定义异常类方法: 通过继承Throwable或Exc

  • mybatisPlus 实体类与数据库表映射关系详解

    目录 实体类与数据库表映射关系 具体的映射方法有两种 忽略某个实体类属性和数据库表字段之间的映射关系 问题描述 解决方案 实体类与数据库表映射关系 使用mybatisPlus时,会确定实体类和数据的映射关系 具体的映射方法有两种 1.默认:采用驼峰映射规则 例如MyUserTable 对应的数据库表为 my_user_table ;  TEMyUserTable 对应表名为t_e_my_user_table; 2.注解@TableName   在类名上方添加@TableName("my_user

  • 解析Java的JVM以及类与对象的概念

    Java虚拟机(JVM)以及跨平台原理 相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平

  • C++类和对象到底是什么

    目录 1.C++ 中的类 2.面向对象编程(Object Oriented Programming,OOP) 1.C++ 中的类 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同:可以通过结构体来定义结构体变量,每个变量拥有相同的性质. 例如: #include <stdio.h> //定义结构体 Student struct Student{ //结构体包含的成员变量 char *name; i

随机推荐