类的静态成员变量与函数
静态成员变量
- 静态成员变量属于整个类所有
- 静态成员变量的生命周期不依赖于任何对象
- 可以通过类名直接访问公有静态成员变量
- 所有对象共享类的静态成员变量
- 可以通过对象名访问公有静态成员变量
静态成员变量的特性
- 在定义时直接通过static关键字修饰
- 静态成员变量需要在类外单独分配空间
- 静态成员变量在程序内部位于全局数据区
#include <stdio.h>
class Test
{
static int conut;
public:
Test(/* args */);
~Test();
int getCount();
};
Test::Test(/* args */)
{
conut++;
}
Test::~Test()
{
--conut;
}
int Test :: getCount()
{
return conut;
}
int Test :: conut = 0;
Test gTest;
int main(int argc, char const *argv[])
{
Test t1;
Test t2;
printf("gTest.count = %d\n",gTest.getCount());
printf("t1.count = %d\n",t1.getCount());
printf("t2.count = %d\n",t2.getCount());
return 0;
}
小结
- 类中可以通过static关键字定义静态成员变量
- 静态成员变量隶属于类所有
- 每一个对象都可以访问静态成员变量
- 静态成员变量在全局数据区分配空间
- 静态成员变量的生命周期为程序运行期
静态成员函数
- 静态成员函数是类中特殊的成员函数
- 静态成员函数属于整个类所有
- 可以通过类名直接访问公有静态成员函数
- 可以通过对象名访问公有静态成员函数
静态成员函数定义,直接在函数前面使用static关键字进行修饰
静态成员函数 | 普通成员函数 | |
---|---|---|
所有对象共享 | ok | ok |
隐含this指针 | No | ok |
访问普通成员变量(函数) | No | ok |
访问静态成员变量(函数) | ok | ok |
通过类名直接调用 | ok | No |
通过对象名直接调用 | ok | ok |
小结
- 静态成员函数是类中特殊的成员函数
- 静态成员函数没有隐藏的this参数
- 静态成员函数可以通过类名直接访问
- 静态成员函数只能直接访问静态成员变量(函数)