C++语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。

.cpp文件被称作C++源文件,里面放的都是C++的源代码

.h文件则被称作C++头文件,里面放的也是C++的源代码,头文件不用被编译

(1)现在我来实验一下,首先创建一个头文件h1,头文件里定义了两个函数

int f2(int);
int f3(int, int);

再创建一个源文件y1,声明这两个函数

#include"h1.h"
int f2(int a)
{//do something here...return a + a;
}
int f3(int a, int b) {return a + b;
}

再创建一个主函数main

#include"h1.h"
#include <iostream>
using namespace std;int main()
{int number2 = f2(3);int number3 = f3(1, 2);cout << "f2:" << "结果如下\n";cout << number2;cout << "  \n";cout << "f3:" << "结果如下\n";cout << number3;return 0;
}

结果

一个符号,在整个程序中可以被声明多次,但却要且仅要被定义一次。

为了验证,我们创建一个头文件h2,内容和h1一样。

int f2(int);
int f3(int, int);

编译,此时并没有报错

再创建一个源文件y2,来定义h2的内容

#include"h2.h"
int f3(int a, int b) {return a + b;
}
int f2(int a)
{//do something here...return a + a;
}

编译,报错了

显示重复定义错误

(2)在头文件声明一个类

在h2头文件声明一个类A

class A {public:A();A(int , int);void print();int f4();
private:int a;int b;};

在y2源文件中定义这个类

#include"h2.h"
#include <iostream>
using namespace std;
A::A() {a = 8;b = 9;
}
A::A(int n1 , int n2) {a = n1;b = n2;
}
void A::print() {cout << "我是老A\n";
}
int A::f4() {return a + b;
}

在main函数中调用

#include"h1.h"
#include"h2.h"
#include <iostream>
using namespace std;int main()
{int number2 = f2(3);int number3 = f3(1, 2);A a;cout << "f2:" << "结果如下\n";cout << number2;cout << "  \n";cout << "f3:" << "结果如下\n";cout << number3<<"\n";a.print();cout << "f4:" << "结果如下\n";int number4 = a.f4();cout << number4 << "\n";return 0;
}

结果:

(3)源文件的关联

创建一个头文件h3

class A f5();

再创建一个源文件y3

#include"h2.h"
#include"h3.h"
#include <iostream>
using namespace std;A f5() {A a = A(6, 6);return a;
}

在main函数中调用

#include"h1.h"
#include"h2.h"
#include"h3.h"
#include <iostream>
using namespace std;int main()
{int number2 = f2(3);int number3 = f3(1, 2);A a;cout << "f2:" << "结果如下\n";cout << number2;cout << "  \n";cout << "f3:" << "结果如下\n";cout << number3<<"\n";a.print();cout << "f4:" << "结果如下\n";int number4 = a.f4();cout << number4 << "\n";A b = f5();b.print();int number5 = b.f4();cout << "f5:" << "结果如下\n";cout << number5 << "\n";return 0;
}

结果:

关于c++源文件与头文件的编译规则总结相关推荐

  1. 【STM32学习笔记】(5)—— STM32工程添加源文件和头文件

    向工程目录里创建头文件和源文件 STM32的工程文件构成较为复杂,同时为STM32工程文件添加源文件和头文件也是较为复杂的,下面就由此文章来介绍怎么给STM32工程添加源文件(.c)与头文件(.h), ...

  2. 基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件

    基于F28335的Simulink代码生成系列文章目录 基于F28335的Simulink代码生成(一)--搞懂模型的运行逻辑 基于F28335的Simulink代码生成(二)--EPWM模块同步设置 ...

  3. C++中头文件的命名规则

    C++中头文件的命名规则,因为C++是从C语言发展而来的,为了与C兼容,C++保留了C语言中的一些规定,其中就包括用.h作为后缀的头文件,比如大家所熟悉的:stdio.h.math.h和string. ...

  4. mp4文件时长 c++源码_【C语言】如何使用头文件 .h 编译 C 源码!so easy!

    在 C 语言中,头文件或包含文件通常是一个源代码文件,程序员使用编译器指令将头文件包含进其他源文件的开始(或头部),由编译器在处理另一个源文件时自动包含进来. 一个头文件一般包含类.子程序.变量和其他 ...

  5. C++源文件 include头文件

    C++源文件从文本到可执行文件经历的过程? 对于C++源文件,从文本到可执行文件一般需要四个过程: 预处理阶段:对源代码文件中文件包含关系(头文件).预编译语句(宏定义)进行分析和替换,生成预编译文件 ...

  6. 类型重定义 头文件预编译设置

    这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次.在编写头文件的时候,如果没有加上这一句,编译器可能会编译多次这个头文件.VS编译器会报出这个头文件 里 ...

  7. QT:创建一个widget,包含源文件,头文件,以及ui文件

    1. 安装QT 2. 在QT Welcome画面,点击 New Project 3. 选择Application--Qt Widgets Application 4. 按提示创建即可 文件目录如下: ...

  8. linux头文件怎么编译,microsoft编译器怎么使用Linux头文件

    microsoft编译器如何使用Linux头文件? #include #include #include #include #include #include #include #include #i ...

  9. 创建QT项目时只有.pro文件,源文件和头文件

    [问题描述] [原因分析] 问题原因:新建工程时没有选择合适的构建套件 [解决方案] 1新建文件 2.选择kits 下面这一步可以根据自己的需要选择相关的Kits 3.此时生成的文件还只有一个.pro ...

最新文章

  1. 阿里再开源!基于JAVA的模块化开发框架JarsLink
  2. P7717-「EZEC-10」序列【Trie】
  3. Discuz! 全局变量 $_G
  4. css3实现带有简单动画按钮导航
  5. 学习hadoop需要具备基础知识
  6. 华师大数据科学考研_华东师范大学数据科学与工程需要复习哪些内容?
  7. 珠海 第十届亚洲机器人锦标赛_滨和中学“VEX”团队斩获粤港澳机器人大赛多个大奖!...
  8. Centos允许root远程登录设置
  9. 标准C++ 与 VC++ 区别集锦(待续)
  10. 【Python】ID3算法的实现
  11. CodeForces - 1040B Shashlik Cooking(水题)
  12. 加拿大计算机专业前八大学,加拿大留学:计算机工程专业排名前八的名校详情...
  13. 玩寻仙一个月之我感受
  14. 紫罗兰永恒花园女性CG模型作品
  15. Win10联想电脑连不上wifi解决方法
  16. 小白学习MySQL - 聊聊数据备份的重要性
  17. app 服务器维护通知,启用 App Store 服务器通知
  18. 工程结算款支付比例_工程进度款的支付比例及付款实例分析
  19. think-queue
  20. Nexus环境安装部署及使用

热门文章

  1. MAC升级Ruby版本
  2. Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片
  3. windows10mac地址更改方法
  4. 阿里平头哥数字IC验证笔试题
  5. 我读 《异类》 - 马尔科姆 · 格拉德维尔 / 不一样的成功启示录
  6. 计算机主板上实时时钟晶振频率为,电脑主板晶振的识别及测量方法介绍
  7. 获取微信公众号openID,code
  8. 老子《道德经》第三十二章
  9. 【批处理DOS-CMD命令-汇总和小结】-切换工作目录,切换当前目录,进入指定文件夹(cd和chdir、pushd和popd)
  10. uniapp隐藏页面顶部导航栏和手机系统顶部导航栏