用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 。下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写。
写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。
在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):
#ifndef POWER_C
#define POWER_C
//你的代码写在这里
//extern double power(double base, int exponent);
#endif
这样做是为了防止重复编译,不这样做就有可能出错。至于 POWER_C 这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。
源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。
下面举个最简单的例子来描述一下,咱就求个圆面积。
第1步,建立一个空工程。
第2步,在头文件的文件夹里新建一个名为Circle.h的头文件,它的内容如下:
#ifndef CIRCLE_H
#define CIRCLE_H
class Circle
{
private:
double r; //半径
public:
Circle(); //构造函数
Circle(double R); //构造函数
double Area(); //求面积函数
};
#endif
注意到开头结尾的预编译语句。在头文件里,并不写出函数的具体实现。
第3步,要给出Circle类的具体实现,因此,在源文件夹里新建一个Circle.cc的文件,它的内容如下:
#include "Circle.h"
Circle::Circle()
{
this->r = 5.0;
}
Circle::Circle(double R)
{
this->r = R;
}
double Circle::Area()
{
return 3.14 * r * r;
}
需要注意的是:开头处包含了Circle.h,事实上,只要此cpp文件用到的文件,都要包含进来!这个文件的名字其实不一定要叫Circle.cc,但非常建议cc文件与头文件相对应
。
最后,我们建一个Test.cc来测试我们写的Circle类,它的内容如下:
#include "Circle.h"
#include <iostream>
using namespace std;
int main()
{
Circle c(2);
cout << "Area=" << c.Area() << endl;
return 0;
}
CMakeLists.txt
cmake
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (circle)
# 查找目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(circle ${DIR_SRCS})
注意到开头时有#include “Circle.h” 的声明,证明我们使用到了我们刚才写的Circle类。
在circle文件夹下 先 cmake .
然后在 make 就生成circle 执行文件 ./circle
文章浏览阅读82次。1.rpm -qa|grep vim显示-bash: vim: command not found2.yum -y install vim*报错:Loaded plugins:fastestmirror Determining fastest mirrorsCould not retrieve mirrorlist http://mirrorlist.centos.org/?re..._[root@hadoop simple]# rz -e bash: rz: 未找到命令....
文章浏览阅读8.9k次。Actually, I’mtrying to make Ruby natural, not simple. Ruby is simple in appearance, but isvery complex inside, just like our human body. - Matz, Ruby 发明人Ruby是个美丽、灵巧而且方便又实用的程序语言,而Ruby on Rails正是 Ruby 程_typeerror: can't convert fixnum into string
文章浏览阅读2k次。Charm BraceletTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 10399 Accepted: 4667DescriptionBessie has gone to the mall's jewelry store and spies a_bessie has gone to the mall's je
文章浏览阅读1k次。点击上方“CVer”,选择加"星标"置顶重磅干货,第一时间送达本文转载自:AI人工智能初学者Characterizing signal propagation to clo..._resnet去掉batchnorm训练不稳定
文章浏览阅读36次。public class Regexlib { /// <summary> /// 判断字符串是否是a-zA-Z0-9_范围内(4,18位范围内) /// </summary> /// <param name="strIn"></param> /// <returns..._工具类产品检验规范通用版
文章浏览阅读1.8k次。*此篇博客仅作为个人笔记和学习参考DHCP协议包格式DHCP报文类型DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Infrom;DHCP Discover数据包分析(发现)Bootstrap Protocol (Discover)Message typ..._liteonte
文章浏览阅读497次。一、爬虫如何抓取网页数据:网页三大特征: -1. 网页都有自己唯一的URL(统一资源定位符)来进行定位 -2. 网页都使用HTML (超文本标记语言)来描述页面信息。 -3. 网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。爬虫的设计思路: -1. 首先确定需要爬取的网页URL地址。 -2. 通过HTTP/HTTP协议来获取对应的HTML页面。 -3..._爬虫可以用get取到载荷中的值吗
文章浏览阅读97次。linux基础学习网址:https://www.runoob.com/linux/linux-tutorial.html比较重点的是这个启动过程的介绍学习:https://www.runoob.com/linux/linux-system-boot.html/**Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:内核的引导。运行 init。...
文章浏览阅读320次,点赞10次,收藏9次。备战2022春招或暑期实习,祝大家每天进步亿点点!Day7 本篇总结的是 《Java中的abstract和interface》,后续会每日更新~ 关于《Redis入门到精通》、《并发编程》等知识点可以参考我的往期博客:《Redis从入门到精通》系列《并发编程》系列 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!1、简介abstract和interface关键字在Java中随处可见,它是Java三大特性封装、继承、多态特性的实现重要支柱之一。int..._java 优化 创建abtract 或interface
文章浏览阅读247次。题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114875633664题意:输入n个学生,k門课程,每门课程的编号n1和人数n2,并输入这n2个人的姓名,姓名由3个大写字母和1个10进制数组成。要求来询问的n个学生所选的课程编号,并按编号从小到大输出。思路:首先利用进制思想将每个人的名字转换成..._打印学生课程清单pta
文章浏览阅读155次。2018年可谓是中国智能音箱的元年。业内普遍认为,智能音箱是切入智能家居使用场景、并易于被用户接受的理想入口,而智能家居的开关一旦被打开,更多的产品和服务将快速进入消费者的日常生活,获得一个更多元的商业环境。因此,近两年国内外科技巨头、互联网巨头皆大力发展智能音箱,使得该领域得到飞跃式增长,并从小众逐渐走向大众。值得一提的是,智能音箱除了具有巨大的消费市场外,对于互联网巨头们来说更起到AI市...
文章浏览阅读2.3k次。在安装spark后,通过bin/hive 启动hive时报错:ls:cannot access /export/servers/spark/lib/spark-assembly-*.jar: No such file or directoryog原因分析:spark2的jar包结构改变,安装的hive中,hive启动脚本内容与之不匹配。解决方案:进入hive目录中,vim bin/hi..._cannot access /data/apps/spark-3.1.3/lib/spark-assembly-*.jar: no such file