这里使用1个全局变量、1个全局静态变量、1个静态成员变量做测试
例:
ClassA.h文件
#pragma once
#include <iostream>
namespace ls
{
extern int cs_num1;
static int cs_num2 = 2;
class ClassA
{
public:
ClassA();
~ClassA();
public:
static int cs_num3;
};
}
ClassA.cpp:
#include "ClassA.h"
int ls::cs_num1 = 1;
int ls::ClassA::cs_num3 = 3;
ls::ClassA::ClassA()
{
}
ls::ClassA::~ClassA()
{
}
ClassB.h
#pragma once
#include "ClassA.h"
extern int ls::cs_num1;
class ClassB
{
public:
ClassB();
~ClassB();
};
ClassB.cpp
#include "ClassB.h"
ClassB::ClassB()
{
ls::cs_num1 = 111;
ls::cs_num2 = 222;
ls::ClassA::cs_num3 = 333;
}
ClassB::~ClassB()
{
}
ClassC.h:
#pragma once
#include "ClassB.h"
class ClassC
{
public:
ClassC();
~ClassC();
ClassB csb;
public:
void testC();
};
ClassC.h:
#include "ClassC.h"
ClassC::ClassC()
{
ls::cs_num2 = 123;
}
ClassC::~ClassC()
{
}
void ClassC::testC()
{
}
main函数:
void main()
{
ClassC csc;
std::cout << "cs_num1:" << ls::cs_num1 << std::endl;
std::cout << "cs_num2:" << ls::cs_num2 << std::endl;
std::cout << "cs_num3:" << ls::ClassA::cs_num3 << std::endl;
}
输出结果:
从结果上来看,只有变量cs_num1和cs_num3产生了变化
小结:
1、对于全局变量,需要在头文件中加上extern,同时在CPP文件中定义
2、对于函数直接使用即可;
3、对于全局静态变量,需要在头文件中声明且初始化,全局静态变量可以不进行初始化,因为声明后是默认初始化的;
4、对于静态函数,其只能在其定义的文件中使用,如果一定非得用,则可以用非静态函数进行封装即可。
5、全局静态变量的作用域只局限于本文件中,生命周期局限于本文件中;
6、类成员静态变量可以作用于整个工程;
7、全局变量如果要作用域整个工程,需要在声明的时候加上extern,包括不同文件使用全局变量的时候也需要加上extern,并在头文件中进行声明