版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
静态成员
我们为什么要使用C++静态成员?静态成员能为我们达到什么样的目的?
很多时候我们使用静态成员的目的,在于想让该类的所有对象共同维护一个或者某几个属性成员。即一个类的多个对象共同使用和维护某个(些)属性。
#include "pch.h"
#include <iostream>
class test {
public:
void count_a();
int get_a() { return a; }
private:
static int a;
};
int test::a = 0;
void test::count_a() {
test::a++;
}
int main()
{
test a, b, c;
a.count_a();
b.count_a();
c.count_a();
std::cout <<"a的值:"<<c.get_a() << std::endl;
//std::cout << "Hello World!\n";
}
如上代码所示,test类有多个对象a,b,c,他们共同维护一个属性a,a只有一个副本,a不属于任何一个对象,访问用“类名::标识符”访问
需要说明的是静态成员具有静态生存周期,静态成员的生存期与程序的运行期相同。静态数据成员之所以在类定义外加以定义,是需要这种方式为静态数据成员分配空间。
静态成员函数
那为什么又要使用静态成员函数?来看下面这个代码
#include "pch.h"
#include <iostream>
class test {
public:
static void count_a(); //变成了静态成员函数
int get_a() { return a; }
private:
static int a;
};
int test::a = 0;
void test::count_a() {
a++; //不用test::a++的访问方法
}
int main()
{
test a, b, c;
a.count_a();
b.count_a();
c.count_a();
std::cout <<"a的值:"<<c.get_a() << std::endl;
//std::cout << "Hello World!\n";
}
结果一样。
很多时候,我们用静态函数成员就是为了访问静态数据成员方便,不用“类名::标识符”这种方式访问。
说明:静态成函数员只能访问静态数据成员和静态函数成员。