C++ 中头文件(.h)和源文件(.cc)的写法简述_怎么建立.cc文件-程序员宅基地

技术标签: C/C++  c++  后端  开发语言  

C++ 中头文件(.h)和源文件(.cc)的写法简述

用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 。下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写。

头文件(.h):

写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。

在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

#ifndef POWER_C
#define POWER_C


//你的代码写在这里
//extern double power(double base, int exponent);
 
#endif

这样做是为了防止重复编译,不这样做就有可能出错。至于 POWER_C 这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。

源文件(.cc):

源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。

Example:

下面举个最简单的例子来描述一下,咱就求个圆面积。

第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
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43874301/article/details/121555071

智能推荐

刚开始学习hadoop.第一步CentOS, 遇到的第一个问题: centos中-bash: vim: command not found...-程序员宅基地

文章浏览阅读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: 未找到命令....

Ruby on rails 实战圣经:Ruby程序语言入门_typeerror: can't convert fixnum into string-程序员宅基地

文章浏览阅读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

poj 3624 Charm Bracelet(01背包入门题)_bessie has gone to the mall's je-程序员宅基地

文章浏览阅读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

DeepMind重新设计高性能ResNet!无需激活归一化层-程序员宅基地

文章浏览阅读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..._工具类产品检验规范通用版

Wireshark数据包分析之DHCP协议包解读-程序员宅基地

文章浏览阅读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

随便推点

爬虫——爬虫模块的基本使用+获取post,get,ajax方式加载的网页的数据-程序员宅基地

文章浏览阅读497次。一、爬虫如何抓取网页数据:网页三大特征:  -1. 网页都有自己唯一的URL(统一资源定位符)来进行定位  -2. 网页都使用HTML (超文本标记语言)来描述页面信息。  -3. 网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。爬虫的设计思路:  -1. 首先确定需要爬取的网页URL地址。  -2. 通过HTTP/HTTP协议来获取对应的HTML页面。  -3..._爬虫可以用get取到载荷中的值吗

linux基础学习路线&review-程序员宅基地

文章浏览阅读97次。linux基础学习网址:https://www.runoob.com/linux/linux-tutorial.html比较重点的是这个启动过程的介绍学习:https://www.runoob.com/linux/linux-system-boot.html/**Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:内核的引导。运行 init。...

盘一盘Java中的abstract和interface(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day7)_java 优化 创建abtract 或interface-程序员宅基地

文章浏览阅读320次,点赞10次,收藏9次。备战2022春招或暑期实习,祝大家每天进步亿点点!Day7 本篇总结的是 《Java中的abstract和interface》,后续会每日更新~ 关于《Redis入门到精通》、《并发编程》等知识点可以参考我的往期博客:《Redis从入门到精通》系列《并发编程》系列 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!1、简介abstract和interface关键字在Java中随处可见,它是Java三大特性封装、继承、多态特性的实现重要支柱之一。int..._java 优化 创建abtract 或interface

pta7-19打印学生选课清单(模拟)-程序员宅基地

文章浏览阅读247次。题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114875633664题意:输入n个学生,k門课程,每门课程的编号n1和人数n2,并输入这n2个人的姓名,姓名由3个大写字母和1个10进制数组成。要求来询问的n个学生所选的课程编号,并按编号从小到大输出。思路:首先利用进制思想将每个人的名字转换成..._打印学生课程清单pta

百箱齐发:2019智能音箱谁主沉浮?-程序员宅基地

文章浏览阅读155次。2018年可谓是中国智能音箱的元年。业内普遍认为,智能音箱是切入智能家居使用场景、并易于被用户接受的理想入口,而智能家居的开关一旦被打开,更多的产品和服务将快速进入消费者的日常生活,获得一个更多元的商业环境。因此,近两年国内外科技巨头、互联网巨头皆大力发展智能音箱,使得该领域得到飞跃式增长,并从小众逐渐走向大众。值得一提的是,智能音箱除了具有巨大的消费市场外,对于互联网巨头们来说更起到AI市...

Hive启动时报错:cannot access ....spark/lib/spark-assembly-*.jar: No such file or directoryog解决_cannot access /data/apps/spark-3.1.3/lib/spark-ass-程序员宅基地

文章浏览阅读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

推荐文章

热门文章

相关标签