•静态类成员:是那些与类本身有关的成员数据和成员函数,而不是与该类对象相关的成员数据和成员函数。
所以静态成员数据也称为类数据,静态成员函数也称为类方法。静态成员数据在类里只是一个说明,还需要一个定义(或叫初始化)。静态成员数据要在类定义之外被初始化(要用类名限定修饰),而且程序里只能提供一次,所以初始化不能放在头文件里。
例1:
class Test{
public:
static int k;
Test(int a):k(a){ //编译错误!!!
}
};
//error: 'int Test::k' is a static data member; it can only be initialized at its definition
例2:
C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化,我们一般选择在类的实现文件中初始化。
int Test::k;
默认初始化为0;
也可自己指定:
int Test::k(20);
class Test{
public:
static const int a = 10;
static int k;
};
int Test::k;
int main(){
cout << Test::k << endl;
cout << Test::a;
return 0;
}
•在inline函数里不要使用静态成员数据,因为编译器不能保证此时静态成员数据已初始化。
class Test{
public:
static const int a = 10;
static int k;
void f(){
k++;
}
};
int Test::k(20);
int main(){
Test t;
t.f();
cout << Test::k;
return 0;
}
class A{
public:
A(A & e):_e3(e){}
A & _e3;
A * _e1;
static A _e;
A _e2; // error C2460: '_e2' : uses 'A', which is being defined
};
•静态成员数据与全局变量的比较:静态成员数据不论类由多少实例,它都只有一个拷贝,这和全局变量类似。但静态成员数据有个作用域名字,而且不一定是public的。
•静态成员函数和友元函数比较:静态成员函数和友元函数都没有隐含的this指针,且都能访问类的private和protected部分。但静态成员函数有个作用域名字,而且不一定是public的。
•const静态成员数据:在有些C++编译器里,有序型的(如int,unsignedlong,char等)const静态成员数据可以
在类里对其初始化。
•静态成员数据初始化次序:静态初始化成员数据次序和类作用域的静态对象、文件作用域和名字空间作用域的对象的生存周期有关。当在不同编译单元(即.cpp文件)的静态初始化有次序依赖,这就有可能有危险。解决的办法将静态成员数据转换为静态成员函数。
•volatile:当一个对象的值可能会在编译器的控制或监视之外被改变,那该对象应该声明为volatile。
此时编译器执行的一些例行优化对它不能应用。volatile也可以修饰类成员函数。对于volatile类对象它只能调用volatile成员函数、构造函数和析构函数。
分享到:
相关推荐
本文主要给大家介绍了关于c++中static修饰符的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 下面一段是引用自effective c++ 中的一句话: 所谓的static对象,其寿命是从构造出来到...
C++储存类型修饰符
C++:浅谈修饰符const 魔鬼作坊学游戏辅助制作 moguizuofang.com
C++操作符详解C++操作符详解C++操作符详解C++操作符详解C++操作符详解
全套Windows系统下 QT C++ 6.6 static 静态编译环境,用它编译出单个可执行程序,不需要一堆依赖库。。。
本文简要总结一下C++中函数的修饰符,其中部分在实际中极少用到。 按修饰符的位置分为函数名前与函数名后两种,以下分别做介绍。 函数名前 1、返回值类型 返回值类型是C++中定义函数的必备部分,这些修饰符包括void...
本文给大家介绍了C++中的const限定修饰符。
一、关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。 static 的两大作用: 一、控制存储方式 static...
C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++编程实例详解C++...
Visual C++数字图像模式识别技术详解.zip Visual C++数字图像模式识别技术详解.zip
在C++中,static关键字是一个多功能且重要的修饰符,它可以用于变量、函数、类成员以及类本身。本文详细介绍了static关键字在C++中的作用和原理,并通过充分的代码示例进行了说明,帮助读者深入理解并正确使用static...
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++读取XML详解C++...
C++类与对象:static静态数据成员静态成员函数.doc
c++语言命令详解c++语言命令详解c++语言命令详解c++语言命令详解
Visual C++游戏开发经典案例详解.pdf
Visual C++数字图像处理典型案例详解(沈晶、刘海波等)的清晰扫描版PDF,以及完整的随书光盘源码。