-
#include using namespace std; class Maker { public: static int a; }; // 静态成员变量的生命周期是整个程序,作用域在类内 int Maker::a = 20; // 必须要进行初始化,且类内声明,类外初始化 void Test01() { // 静态成员属于类,不属于对象,是所有对象共享 cout << Maker::a << endl; // 静态成员可以用类访问,也可以用对象访问 Maker m; cout << m.a << endl; }
-
为什么静态成员不能在类内初始化?
因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。 - 静态成员函数只能访问静态成员变量
-
class Maker2 { public: static int b1; void static SetB(int b) { b1 = b; cout << "b1 = " << b1 << endl; // b2 = b; err } private: int b2; }; int Maker2::b1; void Test02() { Maker2 m2; m2.SetB(200); }
-
- 普通成员函数可以访问静态成员变量
-
class Maker5 { public: void func() { cout << "a=" << a << endl; } public: static int a; }; //类外也可以初始化 int Maker5::a = 30; void test04() { Maker5 m; m.func(); }
-
- const修饰的静态成员变量 可以在类内初始化(必须是int)
-
class Maker4 { public: static const int a = 10; static const int b; }; const int Maker4::b = 10; // 也可以在类外初始化
-
C中一个函数里定义一个static变量是为了保证只初始化一次。
static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。 static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。
c++的静态成员
于 2023-08-03 08:46:45 首次发布