- C++为什么需要静态成员
- C语言中可以通过全局变量实现数据共享,在程序的任何位置都可以访问
- C++中希望某个类的多个对象之间实现数据共享,可以通过static建立一个被局限在类中使用的全局资源,该类型资源被称为静态成员
静态成员变量
- 静态成员变量(可以理解为局限在类中使用的全局变量)
- 被static修饰的成员变量即为静态成员变量
class类名{static数据类型 变量名;//声明};数据类型 类名::变量名=初值;//定义和初始化- 实例化对象时只实现非静态成员变量
- 访问方式:
- 类名::静态成员变量;
- 对象.静态成员变量;
#include<iostream>usingnamespacestd;classA{public:intm_data;staticints_data;// 声明A(intdata=0):m_data(data){}};intA::s_data=100;//定义 并 初始化intmain(void){cout<<A::s_data<<endl;Aa1(123);cout<<"a1 size = "<<sizeof(a1)<<endl;cout<<a1.s_data<<endl;Aa2(1);a2.s_data=999;cout<<a1.s_data<<endl;return0;}静态成员函数
- 被static修饰的成员函数即为静态成员函数
class类名{访问控制限定符:static返回类型 函数名(形参表){...}};- 注意:
- 静态成员函数可以直接定义在类的内部,也可以定义在类的外部,这一点和普通的成员函数没有区别
- 静态成员函数没有this指针,没有const属性,可以把静态函数理解为被限制在类中使用的全局函数
- 静态成员函数中只能访问静态成员,但是在非静态成员函数中既可以访问静态成员也可以访问非静态成员
- 静态成员函数和静态成员变量一样,也要受到类的访问控制限定符的约束
- 在类的外部访问静态成员函数
- 类名::静态成员函数(实参表);
- 对象.静态成员函数(实参表);
#include<iostream>usingnamespacestd;classA{public:intm_data;staticints_data;A(intdata=0):m_data(data){}voidfunc1(void){// func1(A *this)cout<<m_data<<endl;cout<<s_data<<endl;}staticvoidfunc2(){//静态成员函数cout<<"静态成员函数"<<endl;cout<<s_data<<endl;//cout << m_data << endl; //error}};intA::s_data=100;//定义 并 初始化intmain(void){cout<<A::s_data<<endl;A::func2();//A::func1(); //func1(&对象的地址) errorreturn0;}