-两个冒号叫域的解析符,上图第三行的意思就是羁绊的意思,f有一个家(f 是 S里的一个函数)
第四行 ::f()意味着这是一个全局函数
第五行 这是一个全局变量a
不加冒号就是要用这个类里的成员变量a;
- 类的声明(declaration)以及这个类里所有函数的原型全部放在头文件.h里面,这些函数所有的body都放在.cpp里面
- 如果有一个函数声明在一个头文件里,在所有要用到这个函数的地方以及那个唯一去定义它的地方(一定有一个.cpp给出这个函数的body), 都应该include。类也一样。
头文件对于程序员来说是一种contract(合同),这是在设计这个类和使用这个类的人之间的一个合同
编译器(compile)会强化这个合同,它会要求在使用这些函数之前必须声明。
#include头文件的文本部分被插入到一个大大的编译前的文件里头,然后才会被编译。
在main里定义一个类,在.h告诉别人这个类长什么样子,有什么函数是你可以使用的,这些函数原型是什么,在使用者include后就能使用了
.h 和 .cpp应该成对出现
Declarations(声明) and Definitions(定义), only declarations are allowed to be in .h, extern variable(extern 变量是声明) function protitypes(函数原型,函数后面有大括号就是定义,没大括号就是声明), class/struct declaration
第一行的#ifndef(if no define) 如果没有定义XXXX,就会有下面文本的一切,如果之前已经定义,则下面程序不入编译器,
第二行#define(那就定义,宏定义,后面可以没有值。意思是定义了一个宏,)
Standard header file struct
#ifndef HEADER_FLAG
#define HEADER_FLAG
//TYPE declaraton here
#endif
上图标准头文件结构是为了防止在一个.cpp里面include同一个.h多次,而出现那个.h里面类的声明重复出现
.h里面放声明不放定义,是为了避免多个.cpp include同一个.h的时候。链接遇到重复定义的东西。
Tips for header
- 一个头文件里只能放一个类的声明。
- 它的对应的源代码文件用相同的前缀,把后缀改成.cpp,里面放的是函数的body
- The contents of a header file is surrounded with #ifndef #define #endif
- field 用来表示成员变量(作用域是类,在类里的所有函数中都可以直接使用成员变量)
- parameters 函数参数