C++静态成员注意事项
在日常的编程过程中,很多朋友对于C++静态成员注意事项不是很清楚,本文将介绍一下C++静态成员注意事项的内容。
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
C++静态成员注意事项
静态数据成员
类中定义C++静态成员成员的方法就是在该成员的前面加上关键字static.C++静态成员是类的所有对象共享的成员。静态数据成员所占的空间不会随着对象的产生而分配,也不会随着对象的消失而回收。对静态数据成员的操作和类中一般数据成员的操作是不一样的,定义为私有的静态数据成员不能被外界所访问。静态数据成员可由任意访问权限许可的函数所访问。
由于静态数据成员是类的所有对象共享的,而不从属于任何一个具体对象,所以必须对类的静态数据成员进行初始化,但对它的初始化不能在类的构造函数中进行,其初始化语句应当写在程序的全局区域中,并且必须指明其数据类型与所属的类名。
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "construct A " << endl;
}
};
class B
{
private:
static A a;
};
A B::a = A();
int main()
{
return 0;
}
~~~~~~~~~~~~~~~~或者~~~~
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "construct A called before main " << endl;
}
~A()
{
cout << "discontruct A called" << endl;
}
static A* pA;
};
A* A::pA = new A();
int main()
{
//delete A::pA;
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~
静态成员函数
类的C++静态成员函数只能访问类的静态数据成员,而不能访问类中的普通函数成员(非静态数据成员),因为普通数据成员只有类的对象存在时才有意义。
注意:在类的外部不能调用类中的私有静态成员函数。
################################################
// 说白了,静态数据(包括成员数据和成员函数)都会在进程加载类的信息时就被创建,所以有时候你可以将你的程序放在静态对象的构造函数中来运行,不用经过main函数。
// 这样做有什么好处呢?仔细研究c++反射的代码就可以看出来了,我在这里就不多废话了。
c++ 的反射机制利用了static变量在静态区自动的构造的特性(先于main自动构造),来实现各个新建的类的注册功能。