静态成员
静态成员就是在成员变量和成员函数前加上关键字 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修改数据为200cout << 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修改数据为200cout << 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;
}