C++静态成员注意事项

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自动构造),来实现各个新建的类的注册功能。

你可能感兴趣的:(C++,static,static,静态成员)