zoukankan      html  css  js  c++  java
  • 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的三看原则。

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/9650940.html
Copyright © 2011-2022 走看看