static修饰符
static可以修饰成员变量和成员函数
1.static可以修饰成员,用来在族内共享数据
#include <iostream>
using namespace std;
class Student
{
public:
Student(){};
~Student(){};
public:
void getCoin()
{
cout << coin << endl;
}
public:
static int coin; //硬币数 static相当于类的全局变量,其他是无法访问的
};
int Student::coin = 0; //static修饰的成员变量需在类外初始化
int main(int argc, char const *argv[])
{
//1. 通过类直接访问
cout<< Student::coin<<endl; //0
//2. 通过类对象访问
Student s;
cout<< s.coin<<endl; //0
return 0;
}
2.static修饰成员函数,只能访问静态成员
#include <iostream>
using namespace std;
class Student
{
public:
Student(){};
~Student(){};
public:
void getCoin(){
cout<<coin<<endl; //普通函数访问静态成员是没有任何问题的
}
public:
static int coin;
};
int main(int argc, char const *argv[])
{
return 0;
}
#include <iostream>
using namespace std;
class Student
{
public:
Student(){};
~Student(){};
public:
static void getCoin(){
// cout<<coin<<endl; //这里访问coin会报错,静态函数只能访问静态成员
}
public:
int coin;
};
int main(int argc, char const *argv[])
{
return 0;
}
3.static+const
组合
只能就地初始化
#include <iostream>
using namespace std;
class Student
{
public:
Student(){};
~Student(){};
public:
void getCoin(){
cout<<coin<<endl;
}
void getCoin2(){
cout<<coin2<<endl;
}
public:
static int coin;
static const int coin2 = 100; //static const只能就地初始化,别的地方初始化会报错
};
int Student::coin = 10;
int main(int argc, char const *argv[])
{
Student s;
s.getCoin(); //10
s.getCoin2(); //100
return 0;
}