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

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

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  2. 2018 EC-Final 部分题解 (A,J)

    目录 The 2018 ICPC Asia-East Continent Final A.Exotic - Ancient City(思路 并查集) J.Philosophical - Balance ...

  3. BZOJ.4910.[SDOI2017]苹果树(树形依赖背包 DP 单调队列)

    BZOJ 洛谷 \(shadowice\)已经把他的思路说的很清楚了,可以先看一下会更好理解? 这篇主要是对\(Claris\)题解的简单说明.与\(shadowice\)的做法还是有差异的(比如并没 ...

  4. PIVOT和UNPIVOT使用详解

    一.使用PIVOT实现数据表的列转行 建表语句: DROP TABLE STUDENT; CREATE TABLE STUDENT ( 学生编号 BYTE) NULL , 姓名 BYTE) NULL ...

  5. Django——ModuleNotFoundError: No module named 'asgiref.sync'

    Django+channels运行时报错 Unhandled exception in thread started by <function check_errors.<locals&g ...

  6. Hibernate的核心接口

    Hibernate5个核心接口 所有Hibernate应用中都会访问Hibernate的5个核心接口 Configuration接口:配置Hibernate,根启动Hibernate,创建Sessio ...

  7. BZOJ2596 : [Wc2007]疯狂赛车

    根据光路最快原理以及斯涅尔定律,可以得到从定点$P$进入某条直线的最佳入射角. 求出每个端点到每条线段的最佳点,建图求最短路即可. 时间复杂度$O(n^2\log n)$. #include<c ...

  8. BZOJ2130 : 魔塔

    考虑从$0$到$n$枚举$A$的通关楼层. 设$f[i]$表示$B$通关$i$层时$C$最多能得到多少金币,因为金币数非负,所以也可以看作最多通关多少层. 当$A$的通关楼层往上多$1$的时候,这把钥 ...

  9. Prime Path[POJ3126] [SPFA/BFS]

    描述 孤单的zydsg又一次孤单的度过了520,不过下一次不会再这样了.zydsg要做些改变,他想去和素数小姐姐约会. 所有的路口都被标号为了一个4位素数,zydsg现在的位置和素数小姐姐的家也是这样 ...

  10. 新浪SAE创建微信模板消息应用与SVN的使用

    本地项目源文件必须放在应用名目录下面的数字目录里面.如:D:\SVN\xtmp1\1 我们在前面讲述在新浪SAE中如何建站,今天我们来详解如何上传文件.新浪SAE中是不允许用FTP来上传的.我们只能用 ...