美文网首页
C++的static修饰符

C++的static修饰符

作者: StevenHD | 来源:发表于2020-11-04 13:52 被阅读0次

一、static的概念

局部变量之前加上static局部变量就会变成局部静态变量
全局变量之前加上static全局变量就会变成全局静态变量

1.1 static修饰局部变量

  • 影响局部变量的存储位置——局部变量本身是存储在上的,修饰后存储在静态存储区,也就是data段的rw段(根据是否初始化,看看是否在bss段)。
  • 影响局部变量的生命周期——修饰后变得跟main()函数的生命周期是一样的(跟进程一样)
  • 局部变量的作用域变化:当局部静态变量离开作用域后,并不会被销毁,而是会继续留在内存中。但是不能再对它进行访问,除非【包含该局部静态变量的函数再次被调用】,但是局部静态变量的值是不会变的。

1.2 static修饰全局变量

  • 影响了全局变量的作用域——仅限于本文件

作用域可以看作是【从定义之处开始,结束于文件结尾

  • 存储在静态存储区,在程序运行期间一直存在

1.3 static在类内部的表现

【static数据成员是属于类的,所以可以说它属于所有的对象,静态成员是所有对象共享的成员,对于多个对象来说,静态成员只存储在一处,从而可以供所有对象共用】

  • static在类内部用来实现族类(子类也可以共享)对象间的数据共享

生成对象的时候,普通的数据成员才有空间
static成员在类刚声明的时候,就已经有了空间(data rw段)

通过实例可以看到,static成员是不占用sizeof的空间的——

static数据成员不占用空间
结果

二、static的初始化

static数据成员的初始化

必须放在类外,并且不能加static关键字

三、static数据成员属于类也属于对象,但终归属于类

  • static让对象之间的数据是相通的
  • 类本质上也是一个命名空间(小的命名空间)

标题解读:static数据成员属于类也属于对象,但终归属于类

属于意味着通过类名访问。
属于对象意味着通过对象访问。
终归属于也是意味着就算没有对象,也可以通过类名来访问static数据成员。

四、static修饰成员函数

  • static修饰成员函数的作用只有一个——用于管理static数据成员
  • 如果数据成员都是public的,那么可以通过对象直接访问,但是如果是private的,那么只能通过调用成员函数来访问。

static修饰的成员函数,既属于类,也属于对象,但终归属于类。

  • 这句话也意味着,static修饰的成员函数,没有对象,也可以直接通过类名来访问。但是普通的成员函数如果没有对象,是不能直接通过类名来访问的。

static成员函数想要调用非静态数据成员的时候,需要通过对象来引用】

五、static修饰的成员函数没有this指针

  • static修饰的成员函数因为属于类,所以没有this指针,从而不能访问非static数据成员以及成员函数
    static成员函数不能修饰非static成员函数

因为不知道是哪个对象的getTower()函数。


六、实现CCSprite类

示意图
代码实现

七、static const数据成员就地初始化

static const数据成员就地初始化

相关文章

  • php中的访问修饰符、方法修饰符、接口

    访问修饰符 方法修饰符 static(静态的) 1、static修饰属性成为静态属性,static修饰方法成为静态...

  • c++ static修饰符

    修饰局部变量 - static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作...

  • Java static 修饰符

    还是在复习Java,这一次是复习了static修饰符,再来总结一下吧。 一、static修饰符 static修饰符...

  • C++的static修饰符

    一、static的概念 在局部变量之前加上static,局部变量就会变成局部静态变量。在全局变量之前加上stati...

  • 关键字

    Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...

  • 面向对象(十一)-Static

    Static 简介使用static修饰符声明属于类型本身而不是属于特定对象的静态成员。static修饰符可用于类、...

  • coreJava_7——static、final

    一、static修饰符 static修饰符可以用来修饰类的成员变量、成员方法和代码块。 用static修饰的成员变...

  • Java 权限修饰符

    修饰符:权限修饰符:private,默认的,protected,public状态修饰符:static,final抽...

  • Java 核心技术 - Java 数组(一)

    1.3.1 static 修饰符 概述 ​ static关键字的中文意思是静态的,该修饰符可以修饰字段...

  • 权限修饰符+封装+final+static

    修饰符 权限修饰符: public protected 默认 private 状态修饰符: static fina...

网友评论

      本文标题:C++的static修饰符

      本文链接:https://www.haomeiwen.com/subject/evbivktx.html