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的三看原则。

  • 相关阅读:
    BZOJ 4408: [Fjoi 2016]神秘数
    51Nod 1317 相似字符串对
    51Nod 1561 另一种括号序列
    BZOJ 4556: [Tjoi2016&Heoi2016]字符串
    51Nod 1048 整数分解为2的幂 V2
    BZOJ 4698: Sdoi2008 Sandy的卡片
    BZOJ 3571: [Hnoi2014]画框
    BZOJ 2752: [HAOI2012]高速公路(road)
    BZOJ 1095: [ZJOI2007]Hide 捉迷藏
    BZOJ 4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/9650940.html
Copyright © 2011-2022 走看看