static在类中的功能
有时候类需要它的一些成员与类本身直接相关,而不是与类的各个对象保持关联。
例如一个银行账户类可能需要一个数据成员来表示当前的利率。在此例中,我们希望利率与类关联,而非与类的每个对象关联。从实现效率上来看,没有必要每个对象都存储利率信息。而且更为关键的是,一旦利率浮动,我们希望所有的对象都能使用新值。基于这样的需求,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的三看原则。
最新文章
- PHP程序员7小时学会Kotlin系列 - 第一小时 背景
- Python开发GIS的应用组件包
- 我的Android第三章:Android的组件介绍
- HDU 3401 Trade dp+单调队列优化
- Python读取txt文件
- C#后台跳转
- linux安装GraphicsMagick
- JavaScript中定义变量和存储值的类型判断
- MySQL InnoDB锁机制
- php的控制器链
- Luogu P4358 密钥破解 题解报告
- 高通sdm845_la2.0源码编译及使用QFIL刷机
- linux命令——wc
- ASP.NET Core下发布网站图解
- Mybatis的针对于同一个有自己父类或子类的递归查询 (如商品分类)
- ROS 双目标定
- 2017青岛赛区网络赛 Smallest Minimum Cut 求最小割的最小割边数
- SpringBoot入门 (十) 发送邮件
- Unity塔防游戏源码Warfront Defenders Playmaker Kit v1.7
- oracle数据分组