C++Note 静态成员
C++文件执行顺序:预处理-编译-汇编-链接

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:
静态成员变量
所有对象共享同一份数据
在编译阶段分配内存//分配在全局区
类内声明,类外初始化
1 #include <iostream> 2 using namespace std; 3 4 class Person 5 { 6 public: 7 //1.所有对象都共享同一份数据 8 //2.编译阶段就分配内存 9 //3.类内声明,类外初始化操作 10 static int m_A; 11 //静态成员变量有访问权限的 12 private: 13 static int m_B;//类外私有权限访问不到 14 }; 15 int Person::m_A = 100;//类外初始化 16 int Person::m_B = 200; 17 void test01() 18 { 19 Person p; 20 cout << p.m_A << endl;//100 21 Person p2; 22 p2.m_A = 200; 23 cout << p.m_A << endl;//200 用p访问 数据共享 p和p2的(m_A)地址相同 24 } 25 void test02() 26 { 27 //静态成员变量 不属于某个对象上 所有对象都共享同一份数据 28 //因此静态成员变量有两种访问方式 29 30 //1.通过对象进行访问 31 Person p; 32 cout << p.m_A << endl;//100 33 //2.通过类名进行访问 34 cout << Person::m_A << endl;//100 35 } 36 37 int main() 38 { 39 //test01(); 40 test02(); 41 system("pause"); 42 return 0; 43 }
静态成员函数
所有对象共享同一个函数
静态成员函数只能访问静态成员变量
1 #include <iostream> 2 using namespace std; 3 //静态成员函数 4 //所有对象共享同一个函数 5 //静态成员函数只能访问静态成员变量 6 class Person 7 { 8 public: 9 static void func()//静态成员函数 10 { 11 m_A = 200;//静态成员函数可以访问静态成员变量 数据共享一份 可以识别 12 //m_B = 200;//静态成员函数不可以访问 非静态成员变量 无法区分到底是那个对象的m_B 13 cout << "static void func调用" << endl; 14 } 15 static int m_A;//静态成员变量 16 int m_B;//非静态成员变量 17 }; 18 int Person::m_A = 100; 19 20 void test01() 21 { 22 //1.通过对象访问 23 Person p; 24 p.func(); 25 //2.通过类名访问 26 Person::func(); 27 } 28 29 int main() 30 { 31 test01(); 32 system("pause"); 33 return 0; 34 }
浙公网安备 33010602011771号