在成员变量和成员函数前加上关健字static,称为静态成员
静态成员变量:
- 所有对象共享同一份数据。
- 在编译阶段分配内存。
- 类内声明,类外初始化。
静态成员函数:
- 所有对象共享同一个函数。
- 静态成员函数只能访问静态成员变量。
访问静态成员函数:
- 通过对象访问
- 通过类名访问
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
static void f()
{
//a=10;静态成员函数不能访问非静态成员变量
//因为无法区分哪个对象是a的属性,因为a要属于特定的对象
b = 10;//静态成员函数可以访问静态成员变量
//b的数据是共享的,不用知道是哪个特定的对象在调用
cout << "静态成员函数" << endl;
}
int a;
static int b;
private:
static void f1()
{
cout << "私有权限的静态成员函数" << endl;
}
};
int A::b= 1;//静态成员变量类外初始化
void t1()
{
//通过对象访问
A a;
a.f();
//通过类名访问
A::f();
//A::f1();属于私有,类外不能访问
cout << "b=" << A::b << endl;
}
int main()
{
t1();
system("pause");
return 0;
}
如果静态成员变量b在类外的初始化为
int A::b;
且静态成员函数没有给静态成员变量b赋值,那b的值为零。