静态成员变量

一个类中可以有一个或多个静态成员变量,所有的对象都共享这些静态成员变量,都可以引用它。

static 成员变量和普通 static 变量一样,都在内存分区中的全局数据区分配内存,到程序结束时才释放。这就意味着,static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。

静态成员变量必须初始化,而且只能在类体外进行。例如:
int Student::m_total = 10;

初始化时可以赋初值,也可以不赋值。如果不赋值,那么会被默认初始化为 0。全局数据区的变量都有默认的初始值 0,而动态数据区(堆区、栈区)变量的默认值是不确定的,一般认为是垃圾值。

静态成员变量既可以通过对象名访问,也可以通过类名访问,但要遵循 private、protected 和 public 关键字的访问权限限制。当通过对象名访问时,对于不同的对象,访问的是同一份内存。

静态成员函数

在类中,static 除了可以声明静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员。

编译器在编译一个普通成员函数时,会隐式地增加一个形参 this,并把当前对象的地址赋值给 this,所以普通成员函数只能在创建对象后通过对象来调用,因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用,编译器不会为它增加形参 this,它不需要当前对象的地址,所以不管有没有创建对象,都可以调用静态成员函数。

普通成员变量占用对象的内存,静态成员函数没有 this 指针,不知道指向哪个对象,无法访问对象的成员变量,也就是说静态成员函数不能访问普通成员变量,只能访问静态成员变量。

普通成员函数必须通过对象才能调用,而静态成员函数没有 this 指针,无法在函数体内部访问某个对象,所以不能调用普通成员函数,只能调用静态成员函数。

静态成员函数与普通成员函数的根本区别在于:普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

静态成员变量和静态成员函数相关推荐

  1. C++静态成员变量和成员函数

    静态成员变量和成员函数 简介 sizeof不将静态成员变量的大小计算在内 可以通过类名来访问静态成员 静态成员函数不能访问类的非静态成员 简介 static加在局部变量的前面改变其存储类型使之成为静态 ...

  2. c++中静态成员变量和静态成员函数

    静态成员变量 在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享 ...

  3. 13.C++-静态成员变量、静态成员函数

    首先回顾下成员变量 能通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 再来讲讲类的静态成员变量 介绍 静态成员变量属于整个类所有 静态成员变量的生命期 ...

  4. C++面试题-面向对象-静态成员变量以及静态成员函数

    C++面试题-面向对象-静态成员变量以及静态成员函数 问:在类中,静态数据成员和普通数据成员有何区别? 答: 普通数据成员属于类的对象,对象被创建后,普通数据成员才会分配内存.静态数据成员属于整个类, ...

  5. C++静态成员变量与静态成员函数

    类的静态成员有两种:静态成员变量和静态成员函数,语法是在普通成员变量和成员函数前加static关键字. 0.定义 class CRect{ public:void show();//普通成员函数sta ...

  6. C++的静态成员变量和静态成员函数

    C++的静态成员变量和静态成员函数 静态成员变量和静态成员函数算是C++面向对象编程中的一个重点和难点,这里的静态具体指什么呢?与普通的成员变量和成员函数相比,静态成员函数和静态成员变量是属于类的,而 ...

  7. 类中的静态成员变量和静态成员函数

    static静态成员函数 1.static 修饰成员变量 2.static修饰静态成员函数 引子: 静态成员函数: 注意: 3.const 修饰静态成员 静态成员案例 案例1:静态成员 统计类 实例化 ...

  8. qt 静态成员变量_Qt 静态成员函数的调用非静态成员变量,非静态成员函数

    在多人开发的项目中,一些通用的工具类接口可以用静态成员函数.方便调用,并且不容易调用错误. 静态成员函数不传递this指针(不能->),不识别对象个体,所以经常用于对静态数据成员进行操作.不能操 ...

  9. c++ ——静态成员变量和静态成员函数

    前言 c++ 静态成员变量用static 关键字来声明,是整个类的数据成员,其存储不占用某个具体对象的空间,其存储在静态存储区. c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量 ...

最新文章

  1. python模块--json \ pickle \ shelve \ XML模块
  2. pthread_t描述说明
  3. 以实例让你真正明白mapreduce---填空式、分布(分割)编程
  4. 测试架构师10年经验分享:测试小工到资深专家必备这5项技能
  5. linux内核中断向量表,Linux内核中断之中断向量表IDT的初始化
  6. 第一周练习代码以及备注
  7. numpy下, meshgrid
  8. Linux消息队列讲解
  9. idea--Preferences
  10. 检索的原理和方法步骤
  11. Pure Virtual Function
  12. TI芯片(335x、437x、572x)uboot设置logo居中
  13. 软件工程毕业设计课题(63)微信小程序毕业设计JAVA校园新生报到小程序系统设计与实现
  14. 牛客练习赛52.Galahad(树状数组维护区间不相同数的和)
  15. 和成熟男人谈恋爱是什么感觉
  16. 如何实现开机自动挂载
  17. HaaS-Python实现智能水族生态控制器
  18. opencv surf特征点检测(二),API接口分析
  19. 魔兽世界 8.1 服务器维护时间,魔兽世界8.1上线时间 18个主要内容预告
  20. 计算机网络基础(静态路由,动态路由,公网IP,私网IP,NAT技术)

热门文章

  1. python3项目源代码下载_GitHub 上适合新手的 Python 开源项目
  2. 【历史上的今天】11 月 15 日:全球首款商用微处理器;微软进军游戏界;ICQ 诞生
  3. 熊猫烧香制造者李俊出狱以后的六种出路
  4. 模糊神经网络:基于模糊神经网络(Fuzzy Neural Networks,FNN)的数据分类(提供MATLAB代码)
  5. 第二届「科学探索奖」获奖名单公布
  6. 计算机管理员考核指标库,仓库管理员绩效考核指标.docx
  7. 帝国模板留言板增加自定义字段教程
  8. 为什么程序员适合做自由职业者
  9. CCFL的完整形式是什么?
  10. html 水平分割,HTML设置水平分割线