C++类的静态成员详解
类的静态成员分为静态数据成员和静态成员函数
静态数据成员
假如我们要设计一个战争游戏,游戏中有许多的兵种。游戏的过程中,每隔一段时间每个兵种都会产生,同时由于战争的消耗,每个兵种士兵的数量又会减少。为了情节更逼真呐,我们引入了一个士气的概念,当士气比较高的时候,这个兵种的士气战斗力就会很强,士气较低的时候,兵种的战斗力就会比较弱。兵种的士气受很多因素影响,其中一个最直接的因素就是士兵的数量相关,它与数量成正比。我们就需要一组全局变量,每个变量都会记录当前兵种的数量,但是使用全局变量会引入很多的问题,使用全局变量的安全得不到保障,我们可以在程序的任何地方修改它的值。全局变量还可能导致命名空间的污染,当程序比较大的时候,各个模块之间有可能冲突。那如果不使用全局变量,我们就可以使用静态的数据成员。
静态数据成员:以static开头。静态数据成员为各个对象共有,不属于某个具体的对象,所有对象都可以对它进行引用,都可以读取和修改。若一个对象修改了该静态成员的值,则在其他各个对象中该数据成员的值都会同时改变。
定义类时就为静态数据成员分配空间,不随对象的建立而分配空间。可以说它是属于这个类的,定义完类之后就可以引用。
1.定义方法
static int count;//定义了一个int类型的静态数据成员,它的定义是在类里面,但是初始化不可以在类的里面类外面初始化 (你可以在类的实现文件里面初始化):
int CTime::count=0;//初始化不要再加static
2.调用方法
1)类名::静态成员
2)对象名.静态成员
在类内的静态数据成员仅仅是对该成员的声明,同时还需要在类外部进行定义。
当我们在构造函数里面对它++然后输出,在析构函数里面—输出就得到这样的结果:构造函数调用的次数就是创建对象的个数,析构函数调用的次数就是销毁对象的次数。

静态成员函数
在声明成员函数时在函数前添加static关键字就定义了静态成员函数。
与静态数据成员一样,静态成员函数也是类的一部分。
1.声明静态成员函数
static int func(); //定义的时候不需要static关键字
2.调用静态成员函数
1)类名::静态成员函数
2)对象名.静态成员函数
静态成员函数一般是为了处理静态的数据成员。
与一般成员函数的区别:
1)非静态成员函数有this指针,静态成员函数没有this指针。
2)因为它可以在未定义类对象时就可以引用。因此静态成员函数不能访问本类中的非静态成员(没有this指针,就不能通过引用调用成员函数和数据成员)。
原文链接:http://www.maiziedu.com/wiki/cplus/static/
C++类的静态成员详解的更多相关文章
- 【转】UML类图与类的关系详解
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- String类的构造方法详解
package StringDemo; //String类的构造方法详解 //方法一:String(); //方法二:String(byte[] bytes) //方法三:String (byte[] ...
- [转]c++类的构造函数详解
c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...
- Scala 深入浅出实战经典 第63讲:Scala中隐式类代码实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- UML类图与类的关系详解
摘自:http://www.uml.org.cn/oobject/201104212.asp UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类 ...
- phpcms加载系统类与加载应用类之区别详解
<?php 1. 加载系统类方法load_sys_class($classname, $path = ''", $initialize = 1)系统类文件所在的文件路径:/phpcms ...
- c++类的构造函数详解
c++类的构造函数详解 一. 构造函数是干什么的 class Counter{ public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类 ...
- 对python3中pathlib库的Path类的使用详解
原文连接 https://www.jb51.net/article/148789.htm 1.调用库 ? 1 from pathlib import 2.创建Path对象 ? 1 2 3 4 5 ...
- String类内存空间详解
java.lang.String类内存问题详解 字符串理解的难点在于其在堆内存空间上的特殊性,字符串String对象在堆内存上有两种空间: 字符串池(String pool):特殊的堆内存,专门存放S ...
随机推荐
- 《转》Unity3D研究院编辑器之创建Lua脚本模板
Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 : Assets/Editor/Lua/Template/lua.lua ...
- CGrowableArray解析 _ DXUT容器
CGrowableArray的声明 in DXUTmisc.h //--------------------------- ...
- BZOJ4488: [Jsoi2015]最大公约数
Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R ...
- BZOJ4293: [PA2015]Siano
Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...
- http服务的安装与配置
挂载光盘mount /dev/cdrom /y #y是挂载光盘的位置 使用yum命令进安装httpd服务 yum命令的配置文件, yum配置文件位于 /etc/yun.repos.d 目录 ...
- 不使用return false阻止event默认行为
当我们点击一个a标签时,如果这个标签的href指向了另一个地址,那么浏览器会默认跳转到此地址.在页面中,有时我们需要触发点击事件,但是又不想触发默认行为,就需要阻止event的默认行为了. 常规做法 ...
- Files 的值“<<<<<<< .mine”无效。路径中具有非法字符
解决冲突,告诉SVN这个问题已解决(Resolved). 一般更简单些:在你的工程OBJ/DEBUG目录下,找到 工程名.csproj.FileListAbsolute.txt的文件打开并删除含有'& ...
- (转)win7 64 安装mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
原文地址:http://www.cnblogs.com/fnng/p/4115607.html 作者:虫师 今天想在在win7 64位环境下使用python 操作mysql 在安装MySQL-pyth ...
- python反射问题
python中的__import__是以字符串的形式反射导入模块并以字符串的形式执行函数
- sublime下安装ctags
sublime下安装ctags 标签: sublime 当我们阅读代码时, 会遇到很多不明确的函数名, 此时, 我们需要查看这个函数的定义的地方, 在sublime下我们需要安装一个插件, Cta ...