在C++类中声明成员时,加上static关键字声明的成员叫静态成员。包括静态成员变量和静态成员函数(方法)。
一.静态成员变量:
cpp
class Person
{
public:
int a; //普通成员变量
static int b; //静态成员变量
};
静态成员变量特点:
1.在编译阶段分配内存。
2.类内声明,类外初始化。
3.所有对象共享同一份数据。
4.静态成员变量也是有访问权限,私有的成员变量无法再类外访问!
1.类内声明,类外初始化:
cpp
class Person
{
public:
int a = 10; //普通成员变量在类内初始化
static int b; //静态成员变量只能在类内定义,到类外初始化
};
int Person :: b = 20; //类外初始化时不用再写static
2.所有对象共享同一份数据:
cpp
class Person
{
public:
int a = 10; //普通成员变量在类内初始化
static int b; //静态成员变量只能在类内定义,到类外初始化
};
int Person :: b = 20; //类外初始化时不用再写static
void test()
{
Person p1;
Person p2;
对象p1和p2都共享静态成员变量b
cout << "p1.b = " << p1.b << endl;
cout << "p1.b = " << p2.b << endl;
//p2修改b的值,p1在使用时的结果是p2修改后的值
p2.b = 30;
cout << "修改后p1.b = " << p1.b << endl;
cout << "修改后p2.b = " << p2.b << endl;
}
输出结果:
cpp
p1.b = 20
p1.b = 20
修改后p1.b = 30
修改后p2.b = 30
3.静态成员变量的两种访问方式:
1.通过对象访问。
2.通过类名访问。
cpp
class Person
{
public:
int a = 10;
static int b;
};
int Person :: b = 20;
void test()
{
Person p1;
cout << "p1.b = " << p1.b << endl; //1.通过对象访问。
cout << "Person::b = " << Person::b << endl; //2.通过类名访问。
}
输出结果:
cpp
p1.b = 20
Person::b = 20
二.静态成员函数:
cpp
class Person
{
public:
static void func()
{
cout << "func()的调用" << endl;
}
};
静态成员函数特点:
1.所有对象共享同一个函数。
2.静态成员函数只能访问静态成员变量。
3.静态成员函数也是有访问权限,私有的成员函数无法再类外访问!
1.所有对象共享同一个函数:
cpp
class Person
{
public:
//静态成员函数
static void func()
{
cout << "func()的调用" << endl;
}
};
void test()
{
Person p1;
Person p2;
//1.对象p1和p2都共享静态成员函数func()
p1.func();
p2.func();
}
输出结果:
cpp
func()的调用
func()的调用
2.静态成员函数只能访问静态成员变量:
cpp
class Person
{
public:
//静态成员变量
static int b;
//静态成员函数
static void func()
{
cout << "func()调用静态成员变量b的值为:" << endl;
cout << b << endl;
}
};
int Person::b = 10;
void test()
{
Person p1;
p1.func();
}
输出结果:
cpp
func()调用静态成员变量b的值为:
10
3.静态成员的两种访问方式:
1.通过对象访问。
2.通过类名访问。
cpp
p1.func();1.通过对象访问。
Person::func();//2.通过类名访问。