静态成员:在成员变量和成员函数前加关键字static,称为静态成员
静态成员分为:
·静态成员变量
所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化
#include<iostream>
using namespace std;
class person
{
public:
static int m_A; //静态成员变量 类内声明
private:
static int m_B; //静态成员变量也有访问权限
};
int person::m_A=10; // 类外初始化
int person::m_B=20;
void test1()
{
//静态成员变量的两种访问方式:
//1、通过对象
person p1;
p1.m_A = 100;
cout<<"p1.m_A="<<p1.m_A<<endl; //100
person p2;
p2.m_A = 200;//所有对象共享同一份数据
cout<<"p1.m_A="<<p1.m_A<<endl; //200
cout<<"p2.m_A="<<p2.m_A<<endl; //200
//2、通过类名 由于静态成员变量不属于某个对象,因此可通过类名访问
cout<<"m_A="<<person::m_A<<endl;
//cout<<"m_B="<<person::m_B<<endl;//私有权限下不可访问
int main()
{
test1();
system("pause");
retuen 0;
}
}
·静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
#include<iostream>
using namespace std;
class person
{
public:
static void func()
{
cout<<"func调用"<<endl;
m_A = 100;
//m_B = 100;//静态成员函数不可以访问非静态成员变量,无法区分是哪个对象上的m_B属性
}
static int m_A;//静态成员变量
int m_B;
private:
static void func2()
{
cout<<"func2调用"<<endl;
}
};
int person::m_A = 10;
void test1()
{
//静态成员函数的两种访问方式
//1、通过对象
person p1;
p1.func();
//2、通过类名 由于静态成员函数不属于某个对象,因此可通过类名访问
person::func();
//person::func2()//私有权限下不可被访问
}
int mian()
{
test1();
system("pause");
return 0;
}