C++|对象的生存期

四种存储类别

  • auto:局部变量时默认类别;动态生存期
  • static:可用于全局/局部;静态生存期
  • extern:全局变量默认类别
  • register:寄存器类别,分配内存不够时转化为auto

静态生存期(全局寿命)

  • 全局变量所具有的生存期
  • 具有全局寿命
  • 函数内部想要有全局寿命,需要加上static
static int i;

动态生存期(局部寿命)

  • 函数块中声明的,没有加static的对象
  • 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处
  • 每次进入函数块时,都会初始化

静态局部变量

全局寿命,局部可见

作用域

  • 命名空间作用域>类作用域>局部作用域
  • 声明类的对象-时命名空间作用域
clock glob;
  • 对象的成员函数-类作用域
glob.showtime();
  • 复制构造函数声明对象-局部作用域
clock a(glob);//对象a

静态数据成员

  • 使数据可以在不同对象之间共享
  • 静态数据成员
    ①初始化:必须在类外进行,不能在类中
int point::count = 0;//数据类型 类名::静态数据成员名=值;
int* ptr = &point::count;//指针创建,指向类的静态成员,类的静态成员使用时要类名::

②调用:类名::静态数据成员//因为不属于任何对象

⚠⚠静态成员≠静态变量
静态成员是类中数据/函数成员
静态变量是函数体中

静态函数成员

  • 属于整个类,使函数在类的范围内共享
  • 使用:
    只能引用属于该类的静态数据和静态函数
class a{
public:
static void f(xx);//f为静态函数
private:
int x;};//x不是静态成员
void a::f(xx){
cout<<x;//×,∵x不是静态成员
cout<<aa.x;//√,通过对象名

  • (被用)调用:
    ①类外可以使用类名和作用域操作符调用函数
    ②类内共享
//类名::静态成语函数名(实参表)
//对象名.静态成员函数名(实参表)
a.showcount();//对普通函数成员调用必须通过对象名
point::showcount();//⚠与5-4唯一的区别,这里因为是静态函数,类内共享,无需使用对象名

使用静态函数成员的好处:不依赖于任何对象,直接访问静态数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值