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

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

类的定义(同时也是声明),enumstruct,都是内部连接,内联函数,静态的非类成员数据也是
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
 
 
原创粉丝点击