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笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构 ...
随机推荐
- activity theme parent 属性浅析
在AndroidManifest.xml文件中,可以对每一个Activity设置android:themetheme的设置 可以设置为系统自带的格式,也可以自定义格式. A: 系统自带格式 1.and ...
- 安装 Android 运行环境
如果你恰好有一些旧的. 过时的 Android SDK 版本,请务必把所需的包更新至下面提到的版本并安装所有缺少的部分. 安装和配置 SDK 安装最新的 JDK. 使用 brew install an ...
- h5新特性
!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></ ...
- php form表单post提交获取不到数据,而使用get提交能获取到数据 的解决办法
开发环境:xampp,mac,phpstorm 其实出现这个问题的原因就是在于phpstorm,它默认使用的是自带的内部服务器,这个服务器使用63342端口,而且服务器内部有问题,导致POST方法异常 ...
- 获得HttpServletResponse及其他对象
下面只列出获得 HttpServletResponse 对象的方法,获得 HttpServletRequest 对象方法类似. 在struts1.x Action类的execute方法中,有四个参数, ...
- tomcat与resin的比较
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了 ...
- C++中虚函数的作用是什么?它应该怎么用呢?(转)
虚函数联系到多态,多态联系到继承.所以本文中都是在继承层次上做文章.没了继承,什么都没得谈. 下面是对C++的虚函数这玩意儿的理解. 一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你 ...
- HID Boot device.
整理这篇文章的目的: 客户会有用到遥控器部分(遥控器操作flow:当按下某个键时,MCU会透过UR送command给TP,TP吃到后再透过微软标准的keyboard上报) 要求:在BIOS设定阶段,遥 ...
- USB2.0速度识别
我们知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度类型的设备,而USB1.x的hub不能支持高速设备(High Speed Device).因此,如果高速设备挂到USB1. ...
- Fragment的生命周期&同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...