C++(十五)之类的分文件编写

2023-10-31

今天我们来学习一下类的分文件编写。

在我们平时的项目中,很少有一个文件完成的。

即使有, 那么这个文件也会很长。看上去结构就不会那么清晰。

所以我们今天用一个简单的例子,来说明一下如何使用分文件编写的方式,

来完成一个简单的项目。

 

我们使用的例子是在平面上一个点和圆的关系:

(1) 点在圆内。

(2)点在圆周上。

(3)点在圆外面。

 

今天我们直接使用类内部成员属性来判断,不使用外部函数来判断。

我们看下文件的结构:

main文件调用point类和circle类,point/circle又分为头文件和cpp文件。

在头文件中,实现类的定义和成员变量成员属性的声明。包括访问权限的控制。

具体的类的方法实现部分放到cpp文件中。

接下来我们看下源码:

先看简单的,Point类的分解。

point.h

#pragma  once  //头文件一般要写这句话,防止编译器重复编译。类似于C的#define __XXX_H ...
#include <iostream>  //接下来这两句是套路,基本都要这么写,因为下面会用到这些东西
using namespace std;

class Point{

private:
	int px;  //点的横坐标
	int py;  //点的纵坐标

public:
 	void setX(int x);  //设置点的横坐标
	void setY(int y);  //设置点的纵坐标
	int  getX(void);   //获取点的横坐标
	int  getY(void);   //获取点的纵坐标
};

point.cpp

/****************************************************
 * brief  : 设计一Point类 
 * author : shao 
 * date   :	2020-02-25
 * note   : none
 *
 ****************************************************/
#include "point.h" 
 
void Point::setX(int x)
{
	px = x;
}

void Point::setY(int y)
{
	py = y;
}

int  Point::getX(void)
{
	return px;
}

int  Point::getY(void)
{
	return py;
}

circle.h

#pragma  once
#include <iostream>
using namespace std;

#include "point.h"

class Circle{

private:
	int   c_radius;
	Point p_center;

public:
	void setCRadius(int r);
	int  getCRadius(void);
	
	void  setPCenter(Point p);
	Point getPCenter(void);
	
	//判断点是否在圆内 
	void  isPointInnerCircle(Point p);
}; 

circle.cpp

/****************************************************
 * brief  : 设计一Circle类,包含圆心和半径 
 * author : shao 
 * date   :	2020-02-25
 * note   : none
 *
 ****************************************************/
#include "circle.h" 

void Circle::setCRadius(int r)
{
	c_radius = r;
}

int  Circle::getCRadius(void)
{
	return c_radius;
}

/**
 * 设置圆心,圆心是类Point 
 */	
void  Circle::setPCenter(Point p)
{
	p_center = p;  //类和基础类型一样,也可以直接赋值 
}


Point Circle::getPCenter(void)
{
	return p_center;
}

void Circle::isPointInnerCircle(Point p)
{
	//计算点到圆心的距离的平方 
	int p_distance = (p.getX() - p_center.getX())*(p.getX() - p_center.getX()) + 
                     (p.getY() - p_center.getY())*(p.getY() - p_center.getY());
                            
 	int r_distance = c_radius * c_radius;
 	
 	cout << "r_distance = " << r_distance << endl;
 	cout << "p_distance = " << p_distance << endl;
 	
 	if(p_distance == r_distance)
 	{
		cout << "Point is on circle round!" << endl; 
 	}else if(p_distance < r_distance)
 	{
	 	cout << "Point is inner circle!" << endl; 
 	}
 	else
 	{
		cout << "Point is out circle!" << endl;  
 	}
}	

main.cpp

/****************************************************
 * brief  : 测试圆和点的关系 
 * author : shao 
 * date   :	2020-02-25
 * note   : none
 *
 ****************************************************/
#include <iostream>
#include "point.h"
#include "circle.h"

using namespace std;

void test01(void)
{
	Point p1;   //圆周上 
	p1.setX(10);
	p1.setY(10);
	
	Point p2;   //圆外 
	p2.setX(10);
	p2.setY(11);
	
	Point p3;   //圆内 
	p3.setX(10);
	p3.setY(9);
	
	Circle c;
    
    //设置圆心坐标
	Point p_c;
	p_c.setX(10);
	p_c.setY(0);
    //设置半径
	c.setCRadius(10);
    //设置圆心
	c.setPCenter(p_c);
	
    //判断点和圆的关系
	cout << "/*****p1 test****/" << endl; 
	c.isPointInnerCircle(p1);
	cout << "\n/*****p2 test****/" << endl;
	c.isPointInnerCircle(p2);
	cout << "\n/*****p3 test****/" << endl;
	c.isPointInnerCircle(p3);
}

int main(void)
{
	test01();
	
	return 0;
}

结果如下:

 

 

 

 

 

 

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

C++(十五)之类的分文件编写 的相关文章

随机推荐

  • PASCAL VOC 2012 数据集解析

    目录 一 Introduction Classification Detection Competitions Segmentation Competition Action Classification Competition Image
  • IDEA创建第一个spring boot项目提示cannot resolve xxx等错误

    在学习spring boot课程 精通spring boot 42讲 时 根据课程安装好maven和jdk之后 准备开始使用IDEA创建第一个spring boot项目 使用插件spring assistant创建好项目之后 却发现包org
  • python爬虫时报错

    我用的是Python3 66版本 最近写了一段爬虫代码 在DEBUFG模式运行时没有报错 但是普通模式运行时就报下面这个错误 wrap socket argument 1 must be socket socket not SSLSocke
  • (附源码)springboot垃圾自动分类管理系统 毕业设计 160846

    摘 要 随着现在网络的快速发展 网络的应用在各行各业当中它很快融入到了许多分类管理之中 他们利用网络来做这个垃圾自动分类的网站 随之就产生了 垃圾自动分类管理系统 这样就让垃圾自动分类管理系统更加方便简单 对于本垃圾自动分类管理系统的设计来
  • Matlab绘图?学会一招就够了——源代码

    hello 欢迎来到我的博客 你应该是b站来的小伙伴吧 谢谢你的关注 这篇博客的内容是以下这个视频的源代码 Matlab绘图 学会一招就够了 代码如下 clc clear all close all 生成图窗 clc 清楚command窗口
  • 双向卷积神经网络_基于双向特征融合卷积神经网络的液晶面板缺陷检测算法

    基于双向特征融合卷积神经网络的液晶面板缺陷检测算法 彭大芹 刘恒 许国良 邓柯 摘 要 摘要 针对手机液晶面板生产工业中缺陷检测面临的精度低的问题 提 出了一种基于深度学习的液晶面板缺陷检测算法 该算法在传统单向特征融合 的基础上提出了双向
  • Windows上运行Caffe自带的mnist例子

    环境要求 win10 VS2013 CUDA7 5 Caffe的windows版下载地址 https github com Microsoft caffe 配置Caffe工程 1 将Caffe源码的windows目录下CommonSetti
  • 第十三届蓝桥杯大赛软件赛决赛(Java 大学A组)

    蓝桥杯 2022年国赛真题 Java 大学A组 试题 A 火柴棒数字 试题 B 小蓝与钥匙 试题 C 内存空间 试题 D 斐波那契数组 试题 E 交通信号 试题 F 数组个数 试题 G 六六大顺 试题 H 选素数 试题 I 图书借阅 试题
  • GFS浅谈

    GFS Google File System Big Table Map Reduce作为google的三宝技术 是Google诸多服务的基石 我想就自己的理解对GFS文件系统作一个分析 GFS首先是属于分布文件系统 但作为Google公司
  • PAT C入门题目练习-7-90 螺旋方阵 (20 分)

    7 90 螺旋方阵 20 分 所谓 螺旋方阵 是指对任意给定的N 将1到N N的数字从左上角第1个格子开始 按顺时针螺旋方向顺序填入N N的方阵里 本题要求构造这样的螺旋方阵 输入格式 输入在一行中给出一个正整数N lt 10 输出格式 输
  • C#中的一些基本方式总结

    目录 1 委托delegate c 中的将方法作为参数传递 2 堆和栈 3 override重写 4 new关键字 如果子类声明了和父类同样的方法 但用new声明了 会隐藏掉父类的方法 5this和base 6 sealed类 7 泛型方法
  • python中的sort排序_python的sort()怎么排序

    python中的sort 函数只能应用在列表list上 而sorted可以对所有可迭代的对象进行排序的操作 sort方法会在原list上直接进行排序 不会创建新的list 而sorted方法不会对原来的数据做任何改动 排序后的结果是新生成的
  • JavaSE + bluecove 蓝牙连接

    最近公司准备将旧系统的 NET部分翻版 项目除了有后台的还有个与设备对接的客户端用蓝牙连接的 所有这周对相关技术做了一个验证 搜了一下Java 蓝牙相关信息 我去资料也太少了 少也就算了连bluecove库也是有问题的 经过艰难的查找 最终
  • 内核编译出错 [arch/arm/boot/compressed/piggy.lzo] Error 1

    项目场景 linux4 x 内核编译出现错误 问题现象 编译打印输出 arch arm boot compressed Makefile 180 recipe for target arch arm boot compressed pigg
  • RabbitMQ解决消息幂等性问题

    前言 关于MQ消费者的幂等性问题 在于MQ的重试机制 因为网络原因或客户端延迟消费导致重复消费 使用MQ重试机制需要注意的事项以及如何解决消费者幂等性问题以下将逐一讲解 1 RabbitMQ自动重试机制 消费者在消费消息的时候 如果消费者业
  • tensorflow serving部署keras或tf2.0模型

    一 安装docker 由于apt官方库里的docker版本可能比较旧 所以先卸载可能存在的旧版本 sudo apt get remove docker docker engine docker ce docker io 更新apt包索引 s
  • 51单片机 数码管操作

    静态数码管 include
  • 微信oauth2网页授权code过期

    最近开发微信客户端项目时遇到code返回码请求两次 导致获取openid失败的情况 特此一记帮助看到的同学节约一点点的时间 引用微信文档的一段说明 详细参考点击 用户同意授权 获取code 在确保微信公众账号拥有授权作用域 scope参数
  • HBuilder 上传项目到Gitee 但是gitee修改了密码怎么办

    HBuilder 上传项目到Gitee 但是gitee修改了密码怎么办 选中要上传的项目 点击鼠标右键 选择Git同步 在弹出的框中 点击Manage 找到saved Data 这个选项 授权数据 点击Clear 当我们再次pull 或者
  • C++(十五)之类的分文件编写

    今天我们来学习一下类的分文件编写 在我们平时的项目中 很少有一个文件完成的 即使有 那么这个文件也会很长 看上去结构就不会那么清晰 所以我们今天用一个简单的例子 来说明一下如何使用分文件编写的方式 来完成一个简单的项目 我们使用的例子是在平