【C++】类和对象--static 静态成员 📅 2026/7/15 4:10:33 目录静态成员变量静态成员函数注意点有时候我们需要让类的所有对象共享某个数据例如统计已创建对象数量或者让某个函数不依赖于具体对象就可以调用。C通过static关键字提供了这种能力。静态成员变量被static修饰的成员变量称为静态成员变量它具有以下特性不属于任何特定对象存储在全局/静态数据区整个类只有一份被所有对象共享。必须在类体外进行定义和初始化而不能在构造函数初始化列表中初始化因为它不走对象构造流程。遵循类访问限定符限制公有、私有等。经典例子统计程序中创建了多少个类对象。classA{public:A(){_scount;}A(constAt){_scount;}~A(){--_scount;}staticint_scount;// 声明};intA::_scount0;// 定义并初始化intmain(){A a1,a2;Aa3(a1);coutA::_scountendl;// 输出 3return0;}静态成员函数用static修饰的成员函数称为静态成员函数它的最大特点是没有隐式的this指针。因此只能访问静态成员变量或调用其他静态成员函数不能直接访问非静态成员。可以通过类名::函数名()调用无需创建对象非常适合访问被封为私有的静态变量。将上面的_scount设为私有并提供静态公有接口classA{public:A(){_scount;}~A(){--_scount;}staticintGetCount(){return_scount;}private:staticint_scount;};intA::_scount0;intmain(){A a;coutA::GetCount()endl;// 正确通过类名调用}注意点静态成员变量不能在类内直接给缺省值因为缺省值是提供給初始化列表的而静态成员不走初始化列表必须在类外定义。静态成员函数不能加const修饰因为const修饰的是隐含的this指针而静态函数根本没有this。静态成员实现了类级别的数据共享与无实例操作但破坏了对象的封装边界。在下一篇中我们将学习另一种打破封装的手段——友元。