static总结

本文详细探讨了C++中的静态变量与函数的特性。包括它们的内存分配、作用域、生命周期以及在不同场景下的应用。重点讲解了静态变量如何在函数内外使用,静态成员函数的限制,以及静态成员变量的初始化和访问方式。同时阐述了静态数据成员在信息隐藏和避免全局变量冲突方面的优势。

1.static修饰的变量是可以被修改的,static const修饰的变量是不可以被修改的。

 把第15行注释掉后运行结果为:

 

2.之所以叫做静态,是因为不受函数调用和退出而发生变化,不会因为退出函数而消亡,而是一直保持最新被更新的值。存储在静态数据区,该区域在程序运行期间一直不释放。

3.static变量被声明在函数体内则为局部静态变量,只能在定义该函数内部使用。

4.加上static关键字的全局变量就是只能本文件调用,所以extern不能和static一起使用,而没加关键字的static的全局变量可以使用extern调用。使用extern取其他文件全局变量时,不需要在当前头文件中添加其他文件的头文件

5.static代码块可以优化程序性能,会在类加载的时候,按照static块顺序执行一次。

6.在当前文件内,但在函数体外的静态全局变量,可以被本文件所引用,不可被外部文件引用。

7.静态函数只是在声明他的文件当中可见,不能被其他文件所用。函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。

8.静态成员变量可以作为成员函数的参数,而普通成员变量不可以。

9.静态数据成员的类型可以是所属类的类型,而普通数据成员的类型只能是该类类型的指针或引用。

10.静态成员变量必须类内声明,类外赋值初始化。

11.静态成员变量可以作为成员函数的参数,而普通成员变量不可以。

12.静态数据成员的初始化格式:<数据类型><类名>::<静态数据成员名>=<值>

13.类的静态数据成员有两种访问方式:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>

14.同全局变量相比,使用静态数据成员有两个优势:

  • 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性
  • 可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能

15.静态成员函数

  • 静态成员函数没有this指针,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数
  • 出现在类体外的函数定义不能指定关键字static
  • 非静态成员函数可以任意地访问静态成员函数和静态数据成员
  • 不能将静态成员函数定义成虚函数:静态成员函数属于类,而虚函数必须根据对象类型才能知道调用哪一个虚函数,故虚函数是一定要在对象的基础上才可以
  • 不可以同时用const和static修饰成员函数:C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值