模块化程序 点与圆的关系 类中成员函数的声明和实现分开写入头文件和源文件中

2023-05-16

@[TOC]模块化程序
**

点和圆的关系

**
在黑马程序员课程4.1.3成员属性设置为私有 课后案例 点和圆的关系中 谈到了文件的封装
此案例是判断点与圆的关系,重点是以另外一个类作为本类中的成员;
在比较大的开发中,会有许多个类,以及许多个函数。因此,以封装的思想,来模块化程序。

#include<iostream>
using namespace std;

class Point
{
public:
	void setX(int x)
	{
		m_X = x;
	}
	int getX()
	{
		return m_X;
	}
	void setY(int y)
	{
		this->m_Y = y;
	}
	int getY()
	{
		return m_Y;
	}
	//Point(int x,int y)
	//{
	//	m_X = x;
	//	m_Y = y;
	//}
private:
	int m_X;
	int m_Y;
};

class Circle
{
public:
	//设置半径和获取半径
	void setR(int r)
	{
		m_R = r;
	}
	int getR()
	{
		return m_R;
	}
	//设置圆心和获取圆心
	void setC(Point center)
	{
		m_Center = center;
	}
	Point getC()
	{
		return m_Center;
	}
private:
	int m_R;
	Point m_Center;
};

void judge( Circle &c, Point &p)//易忘点,用引用的方式传。
{
	int a;
	a = (c.getC().getX() - p.getX()) * (c.getC().getX() - p.getX()) + (c.getC().getY() - p.getY()) * (c.getC().getY() - p.getY());
	if ( a == (c.getR())* (c.getR())) { cout << "点在圆上" << endl; return; }
	if (a > (c.getR()) * (c.getR())) { cout << "点在圆外" << endl; return;}
	if (a < (c.getR()) * (c.getR())) { cout << "点在圆内" << endl; return;}
	return;
}

void test01()
{
	Circle C;
	Point P;
	Point cc;
	int cx, cy,r, px, py;
	cout << "请设置圆心横坐标X:" << endl;
	cin >> cx;
	cout << "请设置圆心纵坐标Y:" << endl;
	cin >> cy;
	cout << "请设置圆的半径R:" << endl;
	cin >> r;
	cout << "请设置点的横坐标X:" << endl;
	cin >> px;
	cout << "请设置点的纵坐标Y:" << endl;
	cin >> py;
	cc.setX(cx);
	cc.setY(cy);
	C.setC(cc);
	C.setR(r);
	P.setX(px);
	P.setY(py);
	judge(C,P);
}

int main()
{
	for (int i = 0; i < 3; i++) { test01(); }
	system("pause");
	return 0;
}

在程序中有point类和Circle类,
在项目中新创建两个文件point.cpp和point.h,以及circle.cpp和circle.h。简单来说就是把类的成员函数的声明放在头文件里,把类的成员函数的实现放在源文件中。
需要注意的是,在头文件中要有#pragma once 以避免重复包含头文件
在这里插入图片描述
主源文件

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

void judge( Circle &c, Point &p)//易忘点,用引用的方式传。
{
	int a;
	a = (c.getC().getX() - p.getX()) * (c.getC().getX() - p.getX()) + (c.getC().getY() - p.getY()) * (c.getC().getY() - p.getY());
	if ( a == (c.getR())* (c.getR())) { cout << "点在圆上" << endl; return; }
	if (a > (c.getR()) * (c.getR())) { cout << "点在圆外" << endl; return;}
	if (a < (c.getR()) * (c.getR())) { cout << "点在圆内" << endl; return;}
	return;
}

void test01()
{
	Circle C;
	Point P;
	Point cc;
	int cx, cy,r, px, py;
	cout << "请设置圆心横坐标X:" << endl;
	cin >> cx;
	cout << "请设置圆心纵坐标Y:" << endl;
	cin >> cy;
	cout << "请设置圆的半径R:" << endl;
	cin >> r;
	cout << "请设置点的横坐标X:" << endl;
	cin >> px;
	cout << "请设置点的纵坐标Y:" << endl;
	cin >> py;
	cc.setX(cx);
	cc.setY(cy);
	C.setC(cc);
	C.setR(r);
	P.setX(px);
	P.setY(py);
	judge(C,P);
}

int main()
{
	for (int i = 0; i < 3; i++) { test01(); }
	system("pause");
	return 0;
}

point.h

#pragma once //这是为了防止头文件重复包含
#include<iostream>
using namespace std;

//在这里只需要保留成员函数的声明和成员变量的声明

	class Point
	{
	public:
		void setX(int x);

		int getX();

		void setY(int y);

		int getY();

	private:
		int m_X;
		int m_Y;
	};

point.cpp

#include"point.h"
void Point::setX(int x)
{
	m_X = x;
}
int Point::getX()
{
	return m_X;
}
void Point::setY(int y)
{
	m_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 setC(Point center);

	Point getC();

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::setC(Point center)
{
	m_Center = center;
}
Point Circle::getC()
{
	return m_Center;
}

类的成员的声明与实现的分开写。

案例 - 职工管理系统

在这里插入图片描述
switch语句里面,default表明默认分支走向,当所有的case条件都不符合时,程序走default分支方向。

现在需要弄明白的就是,如何在堆区创建数组对象。
对于该系统的思路呢,先创建一个父类对象woker,然后创建子类对象employee等,用woker在堆区创建对象数组。woker是一个抽象类,无法实例化对象,那么这个对象数组的类型是?多态的触发,是通过父类的指针或引用接收子类的对象,数组中存放的是相同类型的内容,为了统一三者,用父类woker的指针来接受三者的对象。问题:**可不可以用一个数组来管理父类指针呢?**当然可以,那么该数组应该放在栈区还是堆区呢?如果将数组开辟到栈区,那么该函数执行完,栈区内存释放,对象数组中的数据也就丢失了。所以要以指针的方式,在堆区创建对象数组。要开辟到堆区,手动管理释放。而在堆区开辟的数据会返回相应数据类型的指针,如,返回 boss * manager * employee * ,但三者都继承woker,因此可用woker 来返回子类对象,因此 woker后要跟两个。外面一个是用指针接收堆区返回的数据,里面的指针使用父类指针来接收子类的对象,从而触发多态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模块化程序 点与圆的关系 类中成员函数的声明和实现分开写入头文件和源文件中 的相关文章

  • 一个简单实用的分离器件锂电池充电电路

    下面推荐一个由分离器件搭建的锂电池充电电路 xff0c 如下图 简单说明一下各器件的功能及电路原理 xff1a 简单说明一下各器件的功能及电路原理 F 43 为充电器的正极 xff0c BT 43 为电池正极 xff0c CH与单片机的一个
  • Android自定义节点进度条NodeProgressBar

    NodeProgressBar 一 简介 Android日常开发中我们可能会遇到开发一个带节点的进度条的需求 xff0c 这个需求看似简单 xff0c 实际上可以挖掘出不少东西 做的好的话也可以做成相对通用的自定义组件 二 自定义属性 sp
  • Http工具类 HttpUtils

    import java io IOException import java nio charset Charset import java security KeyManagementException import java secur
  • 【STM32基础】第二篇、STM32串口的使用

    目录 第一部分 如何取出串口接收到的数据 xff1f 第二部分 如何将串口接收的数据与目标数据进行匹配 xff1f 第三部分 串口常用的发送数据的函数 1 发送一个字符 xff08 8位 xff09 2 发送一个16位数据 xff08 16
  • 使用FlyMCU往STM32中烧写程序

    0 软硬件环境 1 操作系统 xff1a Windows 2 软件 xff1a KeilFlyMcu 3 硬件 xff1a PCSTM32最小系统开发板USB转TTL CH340G 1 生成hex文件 编写好要烧写的程序后 xff0c 点击
  • LVI-SAM安装与测试

    1 介绍 就在昨天 xff0c LVI SAM开源了 xff0c 它是一个lidar visual inertial里程计和建图系统 xff0c 在系统级别结合了LIO SAM和Vins Mono的优势 作者之前还开源了LeGO LOAM和
  • 在Ubuntu 18.04上安装Apollo 6.0

    文章目录 1 前期准备1 1 安装Ubuntu1 2 安装NVIDIA GPU驱动1 3 安装Docker Engine1 4 安装NVIDIA Container Toolkit 2 下载Apollo源文件3 启动Docker容器4 进入
  • R2LIVE安装与测试

    文章目录 1 R2LIVE2 安装依赖2 1 Ubuntu和ROS2 2 Ceres Solver2 3 livox ros driver 3 编译R2LIVE4 运行示例 1 R2LIVE R2LIVE 是一个强大的 实时的 紧密耦合的多
  • 图像标注工具labelme在WIndows系统上的安装和使用

    1 前言 labelme可对图像进行标注 xff0c 包括多边形 xff0c 矩形 xff0c 线 xff0c 点和图像级标注 它是用Python编写的 xff0c 并使用Qt作为其图形界面 详细内容见 xff1a https github
  • Windows环境使用和编译CMake记录

    以下为两种使用方式 xff0c 第一种较为简单 xff0c 第二种需提前安装vs软件 1 二进制方式安装 下载win平台的安装包 xff0c 安装解压后将bin目录添加到环境变量即可 打开命令窗口 xff0c 查看当前版本 百度云下载链接
  • 激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware

    1 前言 单一传感器不可避免的存在局限性 xff0c 为了提高系统的稳健性 xff0c 多采取多传感器融合的方案 xff0c 融合又包含不同传感器的时间同步和空间同步 这里要讲的激光雷达和相机的联合标定就属于空间同步范畴 另外 xff0c
  • 如何使用Keras fit和fit_generator(动手教程)

    写在前面 被Adrian Rosebrock圈粉后 xff0c 就一直期待他的更新 xff0c 作者每周一更新 xff0c 考虑到时差问题 xff08 作者在美国 xff09 xff0c 一般北京时间周二才能看到 作者根据读者留言中的问题写
  • CMake 的常用命令

    目录 0 CMake常用的命令或函数 xff1a 1 定义项目 project 2 多个目录 add subdirectory 3 常用命令 add executable add library 4 常用命令 改变最终目标文件输出位置 5
  • Libcurl的编译_HTTP/HTTPS客户端源码示例

    HTTP HTTPS客户端源码示例 环境 zlib 1 2 8 openssl 1 0 1g curl 7 36 Author Kagula LastUpdateDate 2016 05 09 阅读前提 xff1a CMake工具的基本使用
  • CNN卷积神经网络原理详解(上)

    CNN卷积神经网络原理详解 xff08 上 xff09 前言卷积神经网络的生物背景我们要让计算机做什么 xff1f 卷积网络第一层全连接层训练 前言 卷积网络 xff08 convolutional network 也叫作卷积神经网络 xf
  • 啥也不会照样看懂交叉熵损失函数

    啥也不会照样看懂交叉熵损失函数 什么是损失函数损失函数的作用有哪些损失函数交叉熵 xff08 Cross Entroy 损失函数 什么是损失函数 损失函数 loss function 是用来估量模型的预测值与真实值的不一致程度 xff0c
  • 可变形卷积从概念到实现过程

    可变形卷积从概念到实现过程 什么是可变形卷积 xff1f 为什么要可变形卷积 xff1f 可变形卷积结构形式 xff1f 可变形卷积的学习过程 xff1f 可变形卷积如何实现 xff1f 上期回顾 卷积神经网络进阶用法 残差网络如何解决梯度
  • 导航定位系统的原理解析(一个小白写给另一个小白)

    导航定位系统的原理解析 xff08 写给小白 xff09 前言 三星 定位基本原理 xff08 导航定位的原理 xff09 传输误差后记 前言 无人驾驶是这几年大火的一个研究方向 xff0c 研究无人驾驶需要了解的知识非常多 xff0c 但
  • 一张图详细说明自动驾驶车辆如何搭建硬件系统

    一张图详细说明自动驾驶车辆如何搭建硬件系统 文章结构说明第一部分 xff08 1 xff09 一图展示自动驾驶硬件系统的总体架构 xff08 2 xff09 庖丁解牛说内容1 线控模块2传感器模块 第二部分 xff08 1 xff09 传感
  • Tensorflow安装教程详解(图文详解,深度好文)

    Tensorflow安装教程详解 xff08 图文详解 xff0c 深度好文 xff09 前言安装前的准备工作关于python关于Anaconda 开始使用Tensorflow系统内配置Anaconda使用路径Anaconda Naviga

随机推荐

  • 二级指针 *(unsigned char**)(buf+0) = (unsigned char*)(buf+1)

    RTT里面的代码 1 rt err t rt mp init struct rt mempool mp 2 const char name 3 void start 4 rt size t size 5 rt size t block si
  • 子类以private方式继承父类

    子类以private方式继承父类 xff0c 则父类的pubic protected接口在子类变为private接口 xff0c 而父类的private接口在子类变为不可访问的接口 xff0c 而且不存在子类到父类的转换 所以子类以priv
  • CNN实战之如何分析影评-好看又有趣的讲解

    CNN实战之如何分析影评 好看又有趣的讲解 前言认识影评数据集了解TextCNN模型获取影评数据生成文本数据集生成TextCNN模型评估模型 前言 话说老王买了两张电影票打算请女神小丽去看电影 xff0c 老王希望看完电影趁着热度可以和小丽
  • 无人驾驶时代的室外组网技术研究

    无人驾驶时代的室外组网技术研究 车载自组网车载自组网简介车载自组网特点车载自组网组成及建构 主流自组网通信方式ZigBeeWIFIBlue ToothWiMAXDSRC4G 5G 参考文献 车载自组网 车辆通信网络就是在汽车上装载移动通信设
  • 这本关于机器学习的书---牛XXX

    机器学习好书推荐 如图所示 xff0c 这是一本可读性非常强 xff0c 非常有趣的一本介绍机器学习概率论的书 xff0c 让人看了会上瘾 看到这里 xff0c 作者摊牌了 本书作者即本人
  • ROS下运行rqt报错

    解决方案 xff1a 从上面可以看到ROS是通过python2 7编译 xff0c 查看自己python版本 xff0c 修改为对应版本即可成功运行rqt和rqt graph
  • zed2相机SDK安装及ROS安装

    一 安装相机SDK 相机SDK即相机的软件开发工具包 1 查看CUDA版本 xff1a nvcc version 2 相机SDK xff08 Software Development Kit xff09 下载网址 xff1a ZED SDK
  • zed2相机标定

    一 标定相机 1 刷新ros工作空间 source devel setup bash 2 打开相机ros节点 roslaunch zed wrapper zed2 launch 3 准备棋盘格标定板 xff0c 修改标定板checkboar
  • zed2相机标定(IMU)

    二 IMU标定 陀螺仪模型 xff1a 其中 xff0c 为陀螺仪测量值 xff1b 为陀螺仪真实值 xff1b 为陀螺仪零偏 xff08 也叫偏置 xff09 xff1b 为陀螺随机噪声项 xff08 包括白噪声和随机游走噪声 xff09
  • zed2相机标定(相机+imu)

    相机和imu单独标定请参考前面的博客 1 准备文件 checkboard yaml相机标定文件camera calibration yamlimu标定文件imu calibration yaml IMU标定文件格式需要改为如下 xff1a
  • Opencv中三个光流跟踪函数

    在slam里 xff0c 光流跟踪判断图像中某一物体的动态性 xff0c 主要包括3个函数 xff1a 1 goodFeaturesToTrack函数 作用 xff1a 提取输入图像中像素级别的角点 xff0c 支持harris角点和Shi
  • 算法:二分查找

    给定一个n个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c 如果目标值存在返回下标 xff0c 否则返回 1 1 条件 查找的数
  • 一行代码解决selenium进入抖音出现验证滑块

    我正常从浏览器进入抖音是不出现验证滑块的 xff0c 然后用selenium进入抖音网站发现会出现滑块验证 如下如这是原代码 xff1a 运行代码后就会发现浏览器出现验证滑块 xff0c 这是是因为网站识别出你是使用selenium 这个时
  • 激光点云有关目标检测与目标跟踪的消息定义

    1 jsk recognition msgs BoundingBoxArray msg 安装jsk recognition msgs xff1a sudo apt get install ros melodic jsk recognitio
  • Linefit_ground_segmention文章梳理及代码阅读

    2013年专门针对地面分割的文章 xff1a Fast segmentation of 3D point clouds for ground vehicles 代码链接 xff1a https github com lorenwel lin
  • 使用MFC+GDI编写地图编辑器补充

    使用MFC 43 GDI编写地图编辑器补充 小宝乱猜 在编写MapEdit时我遇到一个问题 xff0c 那就是在程序开始时一切正常 xff0c 但在打开一个地图文件后 xff0c 程序就会因找不到资源文件而画面混乱 调试了半天才发现是相对路
  • 基于select模型的TCP服务器

    之前的一篇博文是基于TCP的服务器和客户机程序 xff0c 今天在这我要实现一个基于select模型的TCP服务器 xff08 仅实现了服务器 xff09 socket套接字编程提供了很多模型来使服务器高效的接受客户端的请求 xff0c s
  • 路由器端口介绍

    路由器所在的网络位置比较复杂 xff0c 既可是内部子网边缘 xff0c 也可位于内 外部网络边缘 同时为了实现强大的适用性 xff0c 它需要连接各种网络 xff0c 这样 xff0c 它的接口也就必须多种多样 对于这些 xff0c 不要
  • 光流(Optical Flow)

    光流的概念 光流是一种描述像素随时间在图像之间运动的方法 随着时间流逝 同一个像素会在图像中运动 我们希望追踪他的运动过程 稀疏光流 计算部分像素 稠密光流 计算全部像素 稀疏光流以Lucas Kanade光流为代表 简称LK光流 光流的两
  • 模块化程序 点与圆的关系 类中成员函数的声明和实现分开写入头文件和源文件中

    64 TOC 模块化程序 点和圆的关系 在黑马程序员课程4 1 3成员属性设置为私有 课后案例 点和圆的关系中 谈到了文件的封装 此案例是判断点与圆的关系 xff0c 重点是以另外一个类作为本类中的成员 xff1b 在比较大的开发中 xff