C++中静态成员变量
一、简介
-
静态成员变量
【含义】
在类的成员变量前加上static关键字,就是把该变量声明为静态成员变量。
【特点】
1>.静态成员变量在内存中只有一份,所有的类对象全局共用它。
2>.在类中对成员变量加上static关键字,进行变量的类型申明。
在内的外部对其进行初始化。
初始化方法:数据类型 类名::变量名 = 初始化值
3>.静态成员变量为类的一部分而不是对象的一部分。
【延伸】
- 只有在定义对象时,操作系统才给分配内存。
- 含有静态成员变量的类用sizeof()计算大小时,计算的知识非静态成员的总的大小,因为静态成员变量存储在.data区,而sizeof计算的是栈区的大小。
-
静态成员函数
【含义】
在类的成员函数前加上static关键字,就是把该变量申明为静态成员函数。
【特点】
1>.静态成员函数在内存中也只有一份,是类的一部分,所有对象拥有共同的静态函数,不依赖与任何一个对象,故静态成员函数中没有this指针。
2>.静态成员函数只能访问惊天成员变量,若是需要访问普通变量,则需要指明对象。
3>.非静态成员函数可以访问静态与非京台成员变量。
二、代码论证
- 下面是一段代码用于验证静态成员函数及成员变量的相关特性
#include <iostream>
using namespace std;
class Demo{
private:
int x;
int y;
static int sum;
public:
int sex_value(int a,int b)
{
this->x = a;
this->y = b;
sum = a + b;
}
int get_x(){
return this->x;
}
int get_y(){
return this->y;
}
int get_sum(){
return sum;
}
#if 0
static void show(){
// 静态成员函数中无this指针,只能访问静态变量
// cout << "x = " << x << endl;
// cout << "y = " << y << endl;
cout << "sum = " << sum << endl;
}
#else
static void show(Demo &obj){
// 静态成员函数中无this指针,只能访问静态变量
cout << "x = " << obj.x << endl;
cout << "y = " << obj.y << endl;
cout << "sum = " << sum << endl;
}
#endif
};
int Demo::sum = 0;
int main(int argc, const char *argv[])
{
Demo d;
d.sex_value(10,20);
cout << "x = " << d.get_x() << endl;
cout << "y = " << d.get_y() << endl;
cout << "sum = " << d.get_sum() << endl;
d.show(d);
return 0;
}