静态成员变量
概述
我们可以通过static声明类的静态成员变量
定义:
#include<iostream>
class T{
public:
static int count;
};
int T::count = 100;//C++老版和新版都支持这个定义方式
对于C++17来说,可以使用内联变量定义
#include<iostream>
class T{
public:
static int count;
inline static int count{100};//C++17支持
};
作用
统计实例的数量
class T {
public:
inline static int count{ 0 };
T() { count++; }
~T() { count--; }
};
T t4;
int main()
{
T t1, t2, t3;
std::cout << T::count << std::endl;
}
得出结果为4
特点
- 所有类的实例共享该变量
- 在类没有实例化情况下,仍可以访问
- 类的静态成员变量不完全属于这个类,内存在一开始就分配,相当于全局变量,只是作用域在类下
静态成员函数
我们可以通过static声明类的静态成员函数,用法与静态成员变量类似
class T {
public:
inline static int count{ 0 };
inline static void test() {
std::cout << "测试" << std::endl;
}
T() { count++; }
};
T t4;
int main()
{
T::test();
}
特点
- 在类没有实例化情况下,仍可以访问
- 类的静态成员函数不能访问非静态成员变量,没有实例化就无法为非静态成员变量分配内存
- 类的静态成员函数不能是const,因为没有意义
- 类的静态成员函数不能使用this指针,原因同2