类和结构体中的静态(static)
当一个变量pt类型前加上static,根据存储知识pt变量被存储在全局区,这个变量在整个程序中只会存在一个实例。下面是在类中定义static变量的程序:
#include <iostream>
using namespace std;
struct Entity
{
static int x,y;
void Print()
{
cout<<x<<","<<y<<endl;
}
};
int Entity::x;
int Entity::y;
int main ()
{
Entity e;
e.x=2;
e.y=3;
Entity e1;
e1.x=5;
e1.y=8;
e.Print();//输出结果为“5,8”
e1.Print();//结果仍为“5,8”
cin.get();
}
碎碎念:
1) “Entity::”用来说明成员变量或者函数处在的作用域,在类的嵌套中尤其常用
2)为什么x,y要在类外部进行定义?为了确保静态变量只有一份实例,而且类内部只涉及对类的声明,并不是定义(定义包括存储空间的开辟和初始化,外部都会发生)
进一步尝试会发现:类内部的静态变量需要显式开辟存储空间,但是静态函数不用
我们不妨再探索一下静态函数的本质。
如果函数非静态,那么其编译后的结果应该是:
class dream
{
private:
int x,y;
public:
void Print()
{
cout<<x<<","<<y<<endl;
}
}
void Print(Entity e)
{
cout<<e.x<<","<<e.y<<endl;
}
如果将它改成静态函数,static会把参数Entity e删去,从而禁止了向函数内传入其他参数值。静态函数正是通过这种形式实现的。
这篇小总结是在Cherno大神,和gpt老师的帮助下写成的,非常感谢他们,也希望对大家有所帮助!