1、内部链接,外部链接
内部链接:只在本编译单元(.obj)能访问和使用的,反之,其它obj文件能访问到该变量或则该接口,那么就是外部链接了
比如
a.cpp中
void Test(){}
在b.cpp中看似访问不到Test,我们只需要在b.h中定义一个
void Test();
然后在b.cpp中就能够访问到了,链接的时候编译器会链接到a.cpp的Test函数的
能够申明为内部链接是最好的了
内部链接有哪些呢:全局静态变量,静态函数(上面的Test如果加上static在b.cpp中就访问不到了),枚举,union,内联函数
外部链接:类内部静态变量,类成员函数,全局变量,全局函数
extern 一个变量就表示从其它地方引入一个外部链接的符号了
2、逻辑设计
弱包含:B的接口中使用A,但是A不属于B的私有成员变量
强包含:B成员变量中包含了A。强包含又有hold和has。A的类型是指针,就是holds,是类型就是has了
3、设计的一些基本规则
3.1 类最小化,不要为了满足所有用户的需求去设计类。要满足大部分用户的重要接口
3.2 保持数据成员私有,这个没什么好说的了
防止全局名字冲突(3.3~3.4)
3.3 避免在文件作用域内包含带有外部链接的数据。包括全局变量,全局函数。
全局变量通过封装在struct中,提供接口,单件去改变
全局函数通过将各个函数放在class中,static的方式去访问
3.4 避免在h文件的文件作用域内使用枚举,typedef和常量数据
通过将枚举定义在struct或class内解决,常量数据通过定义在该struct的static变量解决
如果能定义在cpp中是更好了
3.5 头文件中的宏定义卫哨。另外冗余的包含卫哨可以减少头文件打开次数
3.5 命名规范,需要区分如下类型即可
使用一个一致的方法突出类数据成员
使用一个一致的方法区分类型名字(class,struct)
使用一个一致的方法区分枚举,常量和预处理器等不变的值