static的一些总结

static关键字可以修饰变量和函数,改变它们的存储区域和生命周期。静态变量在程序开始时初始化,在所有对象之外存储。静态成员变量为类所有,而非对象所有,静态成员函数不能访问非静态成员。静态成员提供了类级别的共享和访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static:

  1. 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。

2. 修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命令函数重名,可以将函数定位为static。

3. 修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。

4. 修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在static函数内不能访问非静态成员。

解释

static 修饰的局部变量

在编译的时候,变量会从栈空间分配到静态堆区。影响局部变量生命周期。本质是改变了局部变量的存储位置,为整个生命周期。静态局部变量储存到进程的全局数据区。

静态成员的所有者是类本身和对象,要满足这个要求,就必然会出现一些规则。比如静态成员函数没有this指针,因为this指针实质是调用成员函数的的对象本身,而静态成员函数也可以通过类本身调用,所以这一块相当于削弱了。还有静态成员不能在类内定义初始化,因为类内只能通过类对象访问。 从这里也可以看出来静态成员不属于类的对象,只是被类对象所共享(可以访问但不占为所有)

举例子:声明一个学生类,定义一个静态成员变量学生总数,通过类对象(学生个体A、B、C......)实现统计学生总数。

静态函数成员必须通过对象名来访问非静态数据成员。

静态成员函数的几个特点:

1.静态成员需要在类外定义,这是因为静态成员不属于类对象,程序运行时,编译器根据static为静态成员变量或函数分配一块静态数据区。这和为类对象分配的对象空间毫无相关。

2.同时引出第二点,静态成员不能访问非静态成员函数和非静态成员对象。因为这些只能通过类对象进行访问。

3.静态成员之间可以相互访问,比如静态成员函数访问静态成员变量和访问静态成员函数

4.非静态成员函数可以任意访问静态成员函数和静态成员变量

总结

隐藏性,在变量或函数用static修饰,或缩小使用范围,将此变量或函数只在本文件中使用,其他文件看不到 比如静态局部变量、静态全局变量

变量内容的持久性,程序一开始就初始化,变量存在静态数据段上。,只有程序结束时,变量才会销毁。

在c++中,static可以修饰成员变量,只在该类中可见,也可修饰成员方法。

静态成员方法归类所有,不归对象所有。静态对象成员方法调用不依赖对象,无this指针,不用实例化对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值