C++类静态成员的初始化和用法探讨
一、一般类型的类的静态变量
1.首先看下面的代码:
class CTest1
{
public:
static int m_num1;
void printNum(){cout << m_num2 << endl;};
void SetNum2(int i){m_num2 = i;};
static void printNum2(){cout << m_num2 << endl;};
static void printNum3(){cout << m_num3 << endl;}; private:
static int m_num2;
protected:
static int m_num3; }; int CTest1::m_num1 =1;
int CTest1::m_num2 =2;
int CTest1::m_num3 =3; int main()
{
cout << CTest1::m_num1 << endl;
//cout << CTest1::m_num2 << endl;//这样编译报错
//cout << CTest1::m_num3 << endl;//这样编译报错
CTest1::printNum2();//通过静态函数打印
CTest1::printNum3();//通过静态函数打印 CTest1 t1;
t1.printNum(); CTest1 t2;
t2.printNum(); t1.SetNum2(20);
t1.printNum();
t2.printNum(); t2.SetNum2(30);
t1.printNum();
t2.printNum(); CTest1::m_num1 = 10; return 0;
}
2.测试结果:
1
2
3
2
2
20
20
30
30
3.结论:
1).public类型的类的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问和操作。
2).private、protected,可以在类外面进行初始化,不能通过“类名::变量”访问和操作,可以定义public类型的静态函数,通过“类名::函数”进行访问和操作;也可以通过定义类的对象,通过对象调用函数来访问和操作。
3).类的静态变量,在一个对象(或者类外)改变和操作后,其他所有的地方都会相应改变,比如t1和t2的操作。
这个特点可以用来计算一个类的对象被使用了多少次,变量初始化为0,比如new的时候变量++,delete的时候变量--,当变量为=0时候,可以销毁这个类的对象。
二、const类型的类的静态变量
1.首先看下面的代码:
class CTest2
{
public:
CTest2(int i, char* str)
{ }
static const int m_num1;//static const int m_num1 =16;//VC中这样不行
static const char* m_name;//static const char m_name[m_num1];//VC中这样不行
}; const int CTest2::m_num1 =1;
const char* CTest2::m_name="121212"; int main()
{
cout << CTest2::m_num1 << endl; //CTest2::m_num1 =10;//这样会编译报错。 return 0;
}
2.结论
public类型的类的const类型的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问,但不能被改变,这个是const的特性。
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12193551
C++类静态成员的初始化和用法探讨的更多相关文章
- 【随笔】C++类静态成员变量初始化引发的惨痛教训
事情是这样的,我在某个类中声明了一个静态的map成员, 文件名暂且称之为 xxx.h 然后在 xxx.cc 中全局定义了这个东西,静态成员在类里面只是声明,需要在外边被定义才有内存 然后又在main. ...
- C++类静态成员变量和const常量的初始化方法
C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...
- C#类的成员初始化顺序
首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program { static void Main(string[] args) { Driv ...
- 11.c#类的成员初始化顺序
转自http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象 ...
- c++ 类静态成员、非静态成员初始化
1.静态成员初始化(不能在构造函数或初始化列表中初始化) 1.1 所有静态成员都可以在类定义之外初始化(通用),如下所示 class test { public: static int a; }; ; ...
- 吐槽C++:C++ 类成员变量初始化 之 初始化带有参数的构造函数 的类成员变量。
本来我想写这样的代码: class MatchManager{ public: MatchManager() { } class OnTimerRunFuncHelper{ public: OnTim ...
- Java 类成员的初始化顺序
Java 类成员的初始化顺序 前言:开发中碰到一个Java文件中有很多的成员变量,包括静态和非静态的,还有很多的初始化方法,很好奇这些成员的初始化顺序,在这里作个研究. 1 无继承情况下的Jav ...
- C++类静态成员与类静态成员函数
当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象 ...
- Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?
[Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构 ...
随机推荐
- 控制反转(IOC)/依赖注入(DI)理解
个人学习笔记,来自Acode. 1.术语 控制反转/反向控制,英文全称“Inversion of Control”,简称IoC. 依赖注入,英文全称“Dependency Injection”,简称D ...
- jquery1.7.2的源码分析(六)基本功能
jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, va ...
- JavaScript 自动分页插件 datatables
DataTables Table plug-in for jQuery https://www.datatables.net/
- 我的创业劲儿,无可阻挡-JAVA学院张孝伟
导语:张孝伟,这个怀揣着创业梦想的农村小伙,为了报答父母的恩情,他开启了自己的逐梦之旅.友好的伙伴,火旺的生意.以前让他如鱼得水.就在他满足于现状的时候,一场突如其来的事故,让他一夜间倾家荡产.他是否 ...
- Mapreduce运行过程分析(基于Hadoop2.4)——(一)
1 概述 该瞅瞅MapReduce的内部执行原理了,曾经仅仅知道个皮毛,再不搞搞,不然怎么死的都不晓得.下文会以2.4版本号中的WordCount这个经典样例作为分析的切入点.一步步来看里面究竟是个什 ...
- 获取布局 ActionBar
LayoutInflater inflater = getLayoutInflater();View imageLayout = inflater.inflate(R.layout.preferenc ...
- 设计模式17---设计模式之模板方法模式(Template Method)(行为型)
1.场景模拟 使用软件模拟登录控制,普通用户和工作人员用户,工作人员的密码在数据库中是加密的. 步骤大致如下: 前台提交,后台获取登录信息,同数据库中的登陆信息进行比较,只不过工作人员是加密的,普通用 ...
- VS2010调试小技巧
在VS下做开发的时候我们进行调试的时候路径是这个样子的:http://localhost:端口号/项目名称/index.aspx 但是发布到服务器上面的时候却是这个样子的:http://www.xxx ...
- linux服务器内存占用太高-释放内存
修改/proc/sys/vm/drop_caches,释放Slab占用的cache内存空间(参考drop_caches的官方文档): Writing to this will cause the ke ...
- 关于一个下载的源代码中的”*.vssscc“文件的问题
今天下载了一份程序的源代码,老是提示我要连接源代码管理服务器,这个……你的账号密码我怎么知道,有木有.于是上网搜罗了一番找来了解决方案,在这里分享给可能出现同样问题的童鞋. 首先说明一下什么是vsss ...