1.保持数据成员私有。
2.避免在文件作用域内包含带有外部链接的数据。
文件作用域中带有外部链接的数据,与存在于其他编译单元中的全局变量有冲突的危险。全局变量将对象和代码绑在一起,使得在其他程序中几乎不能选择性地重用编译单元。
简单将这些变量非全局化:
(1) 将所有全局变量放入一个结构中;
(2) 然后将他们私有化并添加静态访问函数。
假设我们有以下全局变量:
int size;
double scale;
const char * system;
通过这些变量放入一个结构内并使之成为该结构的静态成员,就可以把他们从全局名字空间中删除:
struct Global{
static int s_size; //bad idea(public data)
static double s_scale; //bad idea(public data)
static const char *s_system; //bad idea(public data)
};
现在不使用size,scale或system访问全局变量,应该使用Global::s_size、Global::s_scale 或者 Global::s_system 访问全局变量。
对于上面,我们是直接访问了静态成员数据,如果我们要把一个成员(如s_size)的导出数据类型从int变为double,则会改变接口,对所有的客户端程序都会收到影响。若通过静态成员访问(和操纵)静态成员,则允许这种局部修改,不会扰乱全局作用域。
故可以建立一个Global类并为其添加静态操纵函数和访问函数方法来删除公共数据。由于所有接口函数都是静态的,所以没有必要实例化一个对象。如下直接 Global::setsize(2) 既可以修改Global中的s_size值。
class Global
{
static int s_size;
static double s_scale;
static