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

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

static在类中的功能的更多相关文章

  1. static在类中的定义,和enum的用法

    class A { // static int a = 1;//错误,静态变量在类外定义 static int a; static const int b = 1;//如果是静态成员常量,则可以在类内 ...

  2. C++类中的静态成员变量和静态成员函数的作用

    数据成员可以分为静态变量.非静态变量两种. 静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  3. 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能

    编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...

  4. Java中 IO类 - File类中的判断功能

    package com.hxzy.IOSer;import java.io.*;public class Demo05 { public static void main(String[] args) ...

  5. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static

    在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...

  6. 【C++基础】 类中static private public protected

    静态成员在一个类的所有实例间共享数据 “类属性”,是描述类的所有对象共同特征的一个数据项,对所有对象,它的值相同,static定义,为整个类所共有.相对于“实例属性” 如果static成员是私有类型, ...

  7. sizeof的作用——解释类中与类之外static变量的情况

    今天看程序员面试宝典的时候遇到一个问题,书上有这么一句话:sizeof计算栈中分配的大小.咋一看这句话的时候,很不理解,难道像函数中类似于static.extern const类型的变量的sizeof ...

  8. 【转】C++ 类中的static,const,及引用类型的初始化

    文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但 ...

  9. c++:类中的static成员

    首先静态成员可以是public的,也可以是private的,只需在一般的变量.函数声明语句前加上static关键字即可声明一个static变量. 类中的静态成员存在与任何对象之外,所有该类对象的共享一 ...

随机推荐

  1. OI考试需注意的

    能用结构体就用结构体,特别是队列之类的数据结构:类别相同的变量或数组名字不要太相近,最好在名字后面加上标识符(e.g:hash[]&HASH[]就不好,hash1[]&hash2[]正 ...

  2. 用java连接RabbitMQ

    pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artifactId& ...

  3. 1084: 开心的小明(dengdengoj)

    题目描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”.今 ...

  4. BZOJ4912 : [Sdoi2017]天才黑客

    建立新图,原图中每条边在新图中是点,点权为$w_i$,边权为两个字符串的LCP. 对字典树进行DFS,将每个点周围一圈边对应的字符串按DFS序从小到大排序. 根据后缀数组利用height数组求LCP的 ...

  5. BZOJ2368 : Modern Art Plagiarism 树同构

    枚举$T_1$的树根,然后DP,设$f[i][j]$表示$T_1$的子树$i$是否存在包括i的连通子树与$T_2$的子树$j$同构. 若$j$是叶子,那么显然可以. 若$deg_i<deg_j$ ...

  6. Django——日志

    日志级别 5 个级别 debug 调试 info 普通信息 warning : 提醒警告 error: 发生了错误 critical: 严重的错误 在settings中添加: LOGGING = { ...

  7. TOML简介 (转) TOML的由来

    TOML的由来 配置文件的使用由来已久,从.ini.XML.JSON.YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升. TOML是前GitHub CEO, Tom Prest ...

  8. Lua require 相对路径

    lua require 加载方式与我们现在熟知的路径系统不太一样,想要知道lua require 方法的工作原理也很简单 随便写一个错误的require 代码即可: 1 require("l ...

  9. NLP第3章 中文分词技术

  10. 数据中心架构ToR和EoR【总结】

    1.前言 最近在看<云数据中心网络技术>,学习了企业数据中心网络建设过程,看到有ToR和EoR两种布线方式,之前没有接触过,今天总结一下. 2.布线方式 ToR:(Top of Rack) ...