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 ...
随机推荐
- solr 添加索引
添加索引模板: <add> <doc> <field name="employeeId">05991</field> <fie ...
- Linux系统学习优缺点
Linux是一套操作系统,按照鸟哥的说法Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统而来的,功能强大而且稳定性卓越.其实Torvalds ...
- 单链表、循环链表的JS实现
数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑...... 当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...
- [译]App Framework 2.1 (1)之 Quickstart
最近有移动App项目,选择了 Hybrid 的框架Cordova 和 App Framework 框架开发. 本来应该从配置循序渐进开始写的,但由于上班时间太忙,这段时间抽不出空来,只能根据心情和 ...
- XML的简介及其与HTML的区别及联系
XML: Extensible Markup Language(可扩展标记语言) HTML:HyperText Markup Language(超文本标记语言) 两者都是由万维网联盟(W3C)推出的S ...
- lua的C库
在云风的ejoy2d里是没有dll和so之类的东西的, 所有的C扩展都是类似这样写的: int ejoy2d_shader(lua_State *L) { luaL_Reg l[] = { ...
- ceil 模块
# 有时需要得到一个最小的整数,而这个数只能比自己大或相等,不能小于自己 #如: 2.1 我们需要得到的最小整数为3,即使后一位只有很小的一部分,一般用于分页 from math import cei ...
- iOS8沙盒路径的变化
iOS8中的的沙盒路径发生了变化 之前是这样的路径,通过NSHomedictionary()获取的家路径 /Users/wupeng/Library/Application Support/iPhon ...
- ZK 样式使用
控件: <textbox id="usernameTb" sclass="login-user-input" placeholder="账号&q ...
- android 从服务器获取新闻数据并显示在客户端
新闻客户端案例 第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示, 为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直 ...