C++的头文件,源文件区别

C++ 专栏收录该内容
15 篇文章 0 订阅
一、声明与定义的区分:
一个声明就是一个定义,除非 
声明:引入名称
定义:引入实体
1.
它声明了一个没有详细说明函数体的函数
2.
它包含一个 extern 定义符且没有初始化函数或函数体
3.
它是一个包含在一个类定义之内的静态类数据成员的声明,它必须在最终程序的某处准确的定义一次
4.
它是一个类名声明,如 class test;
5.
它是一个 typedef 声明。
言外之意:
1
。类的声明也就是定义
2
。同时赋初值的声明也就是定义,如 int a=2;
3
。类非静态数据成员的声明也就是定义???
4
。类的所有成员函数的声明也就是定义
一个定义就是一个声明,除非:
1.
它定义的是一个静态数据成员
2.
它定义了一个非内联成员函数
内部连接和外部连接:
编译时每个文件会被编译成一个含有必要信息的源文件 ( 又叫编译单元 ) ,然后编译单元会联结成一个和族文件同名的 .o 文件, .o 文件把不同的编译单元中产生的符号联系起来,构成一个可执行文件。有两种截然不同的链接:内部的和外部的,将这些编译单元联系起来。
内部连接:对这个定义的访问被局限在当前编译单元,其他编译单元无法访问。
外部连接:可被其他单元访问,因此名称在整个执行文件中必须唯一。

类的定义(同时也是声明), enum struct ,都是内部连接,内联函数,静态的非类成员数据也是
typedef
声明的类型也是内联结。
非内联成员函数(包括静态成员)有外部连接,非内联函数,非静态自由函数(非类的成员函数)也是外连接。
声明只对当前编译单元有用,他们不会影响到 .o 文件,
 
.h文件,由于该文件会被其他.cpp文件包含,但由于声明只是对当前编译单元有效,是不会将符号引入.o文件,所以该文件不能含有任何外部连接的符号(数据成员和函数)的定义。一般情况下也不要包含内连接符号的定义。
 
综上所诉:
.h文件中能包含:
 
1。类成员数据的声明,但不能赋值
2.类静态数据成员的定义和赋值,但不建议,只是个声明就好。
3。类的成员函数的声明
4。非类成员函数的声明
5.常数的定义:如:const int a=5;
6.静态函数的定义
7.类的内联函数的定义
 
不能包含:
1.  所有非静态变量(不是类的数据成员)的声明
2。 默认命名空间声明不要放在头文件,using namespace std;等应放在.cpp中,在.h文件中使用std::string
 
 
  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
#include <assert h>     设定插入点 #include <ctype h>     字符处理 #include <errno h>     定义错误码 #include <float h>     浮点数处理 #include <fstream h>    文件输入/输出 #include <iomanip h>    参数化输入/输出 #include <iostream h>    数据流输入/输出 #include <limits h>     定义各种数据类型最值常量 #include <locale h>     定义本地化函数 #include <math h>      定义数学函数 #include <stdio h>     定义输入/输出函数 #include <stdlib h>     定义杂项函数及内存分配函数 #include <string h>     字符串处理 #include <strstrea h>    基于数组输入/输出 #include <time h>      定义关于时间函数 #include <wchar h>     宽字符处理及输入/输出 #include <wctype h>     宽字符分类 int spawnvpe int mode char pathname char argv[] char envp[] spawn函数族在mode模式下运行子程序pathname 并将参数 arg0 arg1 arg2 argv[] envp[] 传递给子程序 出错返回 1 mode为运行模式 mode为 P WAIT 表示在子程序运行完后返回本程序 P NOWAIT 表示在子程序运行时同时运行本程序 不可用 P OVERLAY表示在本程序退出后运行子程序 在spawn函数族中 后缀l v p e添加到spawn后 所指定函数将具有某种操作能力 有后缀 p时 函数利用DOSPATH查找子程序文件 l时 函数传递参数个数固定 v时 函数传递参数个数不固定 ">#include <assert h>     设定插入点 #include <ctype h>     字符处理 #include <errno h>     定义错误码 #include <float h>     浮点数处理 #include <fstream h>    文件输入/输出 #include <iomanip h& [更多]
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值