程序的多文件组织:
一个程序包括多个源文件(.cpp)/头文件(.h),比如main.cpp,student.cpp。在源文件中可以引用自己定义的头文件,比如
#include "students.h"。之所以用““””而不用<>是因为,如果用<>,那么在找相应文件的时候会去系统文件夹中找,而如果用""会优先去当前目录寻找。而我们自己编写的头文件是存储在当前目录下和源文件一个目录的,所以要用""。编译的过程中,每一个源文件会生成一个.obj(.o)的目标文件。链接器(linker)将一个个的目标文件(或许还会有若干系统库)链接在一起生成一个完整的可执行文件.exe。
#include其实就是在编译之前就将include文件中的内容copy过来。
类的声明可以单独放到一个头文件(.h)中。类中的成员函数的定义可以放到和main函数不一样的源文件中(.cpp)。
类声明和成员函数定义的分离:
1. 将类的声明放在指定的头文件中。
如果用户想要使用该类,只要把有关的头文件包含进来。
2.程序中可以用该类来定义对象。
在头文件中包含了类的声明,在程序中就可以用该类来定义对象,就可以调用这些对象的公用成员。
3. 成员函数的定义另外放在一个文件中,与声明类的头文件分开。
类成员函数的定义一般不放在头文件中,而放在另一个文件中。
内置函数的定义要写在头文件中。
这种方式实现了信息隐藏。
用好头文件:
头文件的优势:
支持代码的局部单独编译,尤其对类及成员函数声明。
使用头文件的原则:
头问价用于声明,而不是定义。
头问价一般含有支持分别编译所需的类定义及变量和函数的声明。
一些const对象要定义在头文件中。
内置成员函数需要定义在头文件中。
头文件中:
#ifndef也是预编译的命令,表示if not define.结尾对if的结束为#endif。如果if not define判断出是已经定义过了,那么之后的
define中的代码就不会被编译。
类库:
各个文件单独编译带来的好处:
不许每次都重复对所有代码进行编译,而只需要编译一次就可以。把编译后所形成的目标文件保存起来,以后再需要时把它调用出来直接与程序的目标文件
相连接即可。
在实际工作中,并不是将一个类声明做成一个头文件,而是将若干个常用的功能相近的类声明集中在一起形成类库。
两种c++类库:c++编译系统提供的类库;用户根据自己的需要做成的用户自定义类库,提供自己和自己授权的人使用。
类库包括两个组成部分:
类声明头文件————公用接口
已经编译过的成员函数的定义,它是目标文件————(私有实现).(用户看不见)
在用户程序中包含类声明头文件(用户使用类的公用接口,比如:cout,cin),用户无需知道类的实现。于都头文件中成员函数的函数原型声明,就知道了类如何使用。