静态成员在类内声明时加上了static
但是为什么在类外初始化时不能加上static
在类内声明静态成员时加上static关键字是为了标识它是一个类级别的静态变量,而不是对象级别的变量。在类外初始化静态成员时不能加上static关键字,因为在类外定义的变量默认为全局变量,不需要再加上static关键字。需要通过使用类名来限定该静态变量的作用域,例如:
class MyClass
{
public:
static int myStaticVar;
};
int MyClass::myStaticVar = 0;
上面这段代码,在类内定义了一个静态变量myStaticVar,并在类外通过类名限定其作用域,对其进行初始化。
class A
{
public:
static void func();
static int a;
}
// 静态成员函数及变量:类内声明,类外实现
void A::func(){}
int A::a = 100;
1、在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。如上例中的成员变量 a
2、在类中的静态成员函数,只能访问类中的静态成员变量
3、可以通过对象引用或类名(不需要实例化)访问静态成员。
// 通过类名访问静态成员函数和静态成员变量
A::func();
A::a;
以下是完整代码:
#include <iostream>
using namespace std;
class Aaa
{
public:
static void func();
static int a;
};
// 静态成员函数:类内声明,类外实现
void Aaa::func()
{
cout << "It's func()" << endl;
}
// 静态成员变量:类内声明,类外实现
int Aaa::a = 100;
// 全局静态函数:其他文件中不能引用
static void GlobalFunc()
{
cout << "It's global static func!" << endl;
}
int main()
{
Aaa::func(); // 使用类名访问静态成员函数
cout << "a = " << Aaa::a << endl; // 使用类名访问静态成员变量
GlobalFunc();
return 0;
}
谢谢阅读