文章目录
static
我们在成员函数或者成员变量的前面加上static 关键字便是该成员和类直接相关,也就是说该成员不属于任何一个对象,而是该成员被该类的所有对象所共享。
例子:
#include <iostream>
#include<string>
using namespace std;
class test {
public:
test() {
count++;
cout << "第" << count << "个test类对象" << endl;
};
private:
static int count;
};
int test::count = 0;
int main()
{
test t1;
test t2;
test t3;
test t4;
return 0;
}
运行结果
count为test类的静态成员,只要类的其中一个对象修改count,那么其他所有该类的的count也就被修改了,因为所有test类的对象是共享static成员的。静态成员变量的属性有点类似于全局变量。
静态成员变量的声名和实现
静态成员变量
静态成员变量的声名应该在类的内部声名,在类的外部实现,静态成员变量的形式static type var
比如:
static int count;
静态成员函数在类外实现,如下:
int test::count = 0;
静态成员变量在类外实现时不用在加上static,静态成员变量不能在构造函数中进行初始化,因为静态成员变量只能初始化一次,如果在构造函数中初始化则会没实例化一个对象就会初始化一次。
静态成员函数
静态成员函数和静态成员变量相同,不会被某一个对象所拥有,为所有对象所共享。在静态成员函数中不能包含this指针,也就是说我们不能通过静态成员函数访问普通成员。静态成员函数是只能修改静态数据。
class test {
public:
static void fun() {
cout << i << endl;//错误,访问i的形式实际为this->i的省略
cout << count << endl;//正确,因为count为静态变量
}
private:
static int count;
int i;
};
同样,在类外部实现一个静态成员函数也是不需要加static关键字的。
void test::fun() {
cout << i << endl;
cout << count << endl;
}
静态成员函数和静态成员变量的使用
静态成员函数和静态成员变量的使用可以不用实例化对象,直接使用类名::成员变量名
访问即可
cout<<test::count<<endl;//直接使用count变量
test::fun();//直接调用fun函数