五、static关键字
1、static修饰成员变量
●static修饰成员变量,被称为静态成员变量
特点:
1、静态成员变量的空间开辟以及释放和对象的空间开辟、释放没有关系。
2、静态成员变量,需要在类内声明,类外初始化。(在初始化时,就在开辟空间)
3、所有对象共享一份数据
注意:逻辑上该静态成员变量还是属于类的,所以需要作用域符号来初始化 int Person::n = 12;
●静态成员变量,可以通过类名直接访问Hero::n, (当然对象名肯定也可以)
非静态成员只能通过对象名来访问,Hero h1; h1.n2
#include <iostream>
using namespace std;
class Hero
{
public:
int h_atk;
string h_name;
int h_arm;
static int dragon_buf;
};
int Hero::dragon_buf =0;
void test01()
{
Hero h1;
h1.h_name="yasuo";
h1.dragon_buf +=10;
}
void test02()
{
Hero h2;
h2.h_name="dsdf";
cout<<"name:"<<h2.h_name<<"atk:"<<h2.dragon_buf<<endl;
}
int main(int argc, char *argv[])
{
Hero::dragon_buf=4;
test01();
test02();
return 0;
}
2、static修饰成员函数
●static修饰成员函数,被称为静态成员函数
#include <iostream>
using namespace std;
class Hero
{
public:
void HerInfo()
{
cout<<"name:"<<h_name<<endl;
cout<<"atk:"<<h_atk<<endl;
cout<<"arm:"<<h_arm<<endl;
cout<<"buf:"<<dragon_buf<<endl;
}
int h_atk;
string h_name;
int h_arm;
static int dragon_buf;
};
int Hero::dragon_buf =0;
void test01()
{
Hero h1;
h1.h_name="yasuo";
h1.dragon_buf +=10;
}
void test02()
{
Hero h2;
h2.h_name="dsdf";
cout<<"name:"<<h2.h_name<<"atk:"<<h2.dragon_buf<<endl;
}
int main(int argc, char *argv[])
{
Hero::dragon_buf=4;
test01();
test02();
return 0;
}
特点:
1、静态成员函数,是被所有对象共享的函数。
2、静态成员函数在编译阶段展开,所以内部的变量需要在编译阶段就存在,(所以静态成员函数内部只能访问静态成员变量,不能访问非静态成员变量.因为静态成员变量在编译阶段已经存在了)