C++ 静态数据成员使用易错点

来源:互联网 发布:硕鼠下载mac 编辑:程序博客网 时间:2024/05/22 13:48

先看代码

#include <iostream>  #include <conio.h>  using namespace std;  class test  {  public:  static int i;  //(1)static const int count = 1; // 静态常量成员可以在类内初始化//(2)test() {}  void print();  private:  static int j; };  int test::i = 2;  //(1)int test::j = 3;  void test::print()  {  cout << "i = "<< i << endl; cout << "j = "<< j << endl;}  int main()  {  test t;  t.print();  cout << "i = "<< t.i << endl;//(3)//cout << "j = "<< t.j << endl;//测试是否可以不受private作用   (4)return 0;  }  

输出:



程序运行成功,从注释中的(1)~(4)标记的位置可以看到,静态数据成员在使用时有一下一些特点。

1、类的静态成员(static member)必须在类内声明,在类外初始化因为静态成员属于整个类,而不属于某个对象。标记(1)。

2、类的静态成员可以直接被类名调用。i的初始化语句说明了这点,同时注意类外初始化不再需要static关键字。标记(1)。

3、静态常量成员可以在类内初始化。静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化。标记(2)。

4、静态数据成员可以被类对象调用。尽管静态数据成员不属于某个对象。标记(3)。

5、静态数据成员能受private控制符的作用。静态数据成员是可以为private类型的,能受private控制,但是private类型的静态数据只能被类成员函数访问,类外对象不能直接调用,因为对象不能调用类的私有类型。main函数里被注释掉的cout语句不能编译通过。标记(4)。


原创粉丝点击