静态成员
静态成员就是在成员变量和成员函数前加上关键字
static
,称为静态成员
静态成员分为:
静态成员变量
1.所有对象共享同一份数据
2.在编译阶段分配内存
3.类内声明,类外初始化
静态成员函数
1.所有对象共享同一个函数
2.静态成员函数只能访问静态成员变量
静态成员变量:
//静态成员变量
class Person
{
public:
/* 所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化*/
static int m_A; //静态成员变量 类内声明
};
int Person::m_A=100;//类外初始化
void test01()
{
Person p;
cout << p.m_A << endl; //100
Person p2;
p2.m_A = 200; //p2修改数据为200
cout << p.m_A << endl; //共享同一份数据
}
int main()
{
test01();
system("pause");
return 0;
}
静态成员变量 不属于某个对象上,所有对象都共享同一份数据
因此静态成员变量有两种访问方式
1、通过对象进行访问 2、通过类名进行访问
void test02()
{
//静态成员变量 不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
//1、通过对象进行访问
/*Person p;
cout << p.m_A << endl;*/
// 2、通过类名进行访问
cout << Person::m_A << endl;
}
静态成员变量也是有访问权限的 :类外私有权限访问不到
//静态成员变量
class Person
{
public:
/* 所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化*/
static int m_A; //静态成员变量 类内声明
private:
static int m_B; //静态成员变量也是有访问权限的 类内声明
};
int Person::m_A = 100;//类外初始化
int Person::m_B = 200;//类外初始化
void test01()
{
Person p;
cout << p.m_A << endl; //100
Person p2;
p2.m_A = 200; //p2修改数据为200
cout << p.m_A << endl; //共享同一份数据
}
void test02()
{
//静态成员变量 不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
//1、通过对象进行访问
/*Person p;
cout << p.m_A << endl;*/
// 2、通过类名进行访问
cout << Person::m_A << endl; //共有权限
//cout << Person::m_B << endl; //err 类外私有权限访问不到
}
int main()
{
test01();
system("pause");
return 0;
}
静态成员函数:
静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
示例:
//静态成员函数:
//1 所有对象共享同一个函数
//2 静态成员函数只能访问静态成员变量
class Person
{
public:
//静态成员函数
static void func()
{
m_A = 100; //静态成员函数可以访问静态成员变量
//m_B =200; //错误,不可以访问非静态成员变量 无法区分
cout << "static void func调用" << endl;
}
static int m_A; //静态成员变量 类内声明
int m_B; //非静态成员变量
private:
//静态成员函数也是有访问权限的
static void func2()
{
cout << "func2调用" << endl;
}
};
int Person::m_A=0; //类外初始化
void test01()
{
//静态成员变量两种访问方式
//1、通过对象
Person p;
p.func();
//2、通过类名
Person::func();
// Person::func2();//类外私有权限访问不到
}
int main()
{
test01();
system("pause");
return 0;
}