有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。

例如一个银行账户类可能需要一个数据成员来表示当前的利率。在此例中,我们希望利率与类关联,而非与类的每个对象关联。从实现效率上来看,没有必要每个对象都存储利率信息。而且更为关键的是,一旦利率浮动,我们希望所有的对象都能使用新值。基于这样的需求,static的功能就被实现出来了。

在 C++类中, 可以定义静态成员变量。 使用 static 关键字对类的成员变量进
行修饰时, 可以得到类的静态成员变量。
类的静态成员变量的声明如下:
static Type var_name; //在类的内部
类的静态成员变量的初始化如下:
Type class_name::var_name = init_value; //在类的外部
类的静态成员变量的使用方法如下(当然,静态成员变量也需要满足类的访问权限要求---public private protected):
A、 类名::静态数据成员
B、 类对象.静态数据成员

静态成员变量的特性如下:
A、 定义时使用 static 关键字修饰
B、 静态成员变量在类外单独分配空间, 类对象的大小不包括静态成员变量
C、 静态成员变量在程序内部位于全局数据区
静态成员变量属于整个类, 其生命周期不依赖于任何对象, 可以通过类名直
接访问类的公有静态成员变量, 类的所有对象共享类的静态成员变量, 可以通过
对象名访问类的静态成员变量。 类的静态成员变量只存储一份供所有对象共用,
在所有对象中都可以共享它。 使用静态成员变量实现多个对象之间的数据共享不
会破坏隐藏(相比全局变量的优点)的原则, 保证了安全性还可以节省内存。
类的静态成员, 属于类, 也属于对象, 但终归属于类。

static 修饰成员函数
为了管理静态成员, C++提供了静态函数, 提供对外接口。 静态成员函数只能
访问静态成员变量。
静态成员函数的声明如下:
static Type functionname(parameters);
静态成员函数的特性如下:
A、 静态成员函数的意义, 不在于信息共享、 数据沟通, 而在于管理静态数据
成员, 完成对静态数据成员的封装。
B、 静态成员函数只能访问静态数据成员。 原因: 非静态成员函数, 在调用时
this 指针时被当作参数传进。 而静态成员函数属于类, 而不属于对象, 没有 this
指针。

静态成员函数的使用如下(当然,静态成员变量也需要满足类的访问权限要求---public private protected):
A、 类名::函数调用
B、 类对象.函数调用

如果一个类的成员变量, 既要实现共享, 又要实现不可改变, 可以使用 static const 修饰。
 static const 修饰成员变量时, 既可以在类内部进行初始化, 也可以在类外进行初始化(类内不赋值,类外赋值,这个和普通定义时const修饰有点不同)。

static const 修饰成员函数, 是静态成员函数。

派生类中static变量和函数同样应该满足派生类的访问权限,public,private,protected的三看原则。

最新文章

  1. PHP程序员7小时学会Kotlin系列 - 第一小时 背景
  2. Python开发GIS的应用组件包
  3. 我的Android第三章:Android的组件介绍
  4. HDU 3401 Trade dp+单调队列优化
  5. Python读取txt文件
  6. C#后台跳转
  7. linux安装GraphicsMagick
  8. JavaScript中定义变量和存储值的类型判断
  9. MySQL InnoDB锁机制
  10. php的控制器链
  11. Luogu P4358 密钥破解 题解报告
  12. 高通sdm845_la2.0源码编译及使用QFIL刷机
  13. linux命令——wc
  14. ASP.NET Core下发布网站图解
  15. Mybatis的针对于同一个有自己父类或子类的递归查询 (如商品分类)
  16. ROS 双目标定
  17. 2017青岛赛区网络赛 Smallest Minimum Cut 求最小割的最小割边数
  18. SpringBoot入门 (十) 发送邮件
  19. Unity塔防游戏源码Warfront Defenders Playmaker Kit v1.7
  20. oracle数据分组

热门文章

  1. win 2012 安装Net35
  2. 简单总结下opacity、transparent以及rgba
  3. [USACO09JAN]最好的地方Best Spot
  4. 如何使用单例模式返回一个安全的Connection
  5. 05 树莓派安装飞鸽传书 Iptux
  6. BZOJ3655 : 神经错乱数
  7. Js全等和等于
  8. jmeter接口测试实例1-添加学生信息
  9. kvm部署
  10. kettle 6.1 通过JS脚本与SwitchCase结合实现目标步骤选择