• c++:静态数据成员


    一 . 静态数据成员

    类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其它数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态成员还具有以下特点:

    1. 静态数据成员的定义。

    静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义不应该被放在头文件中。静态数据成员初始化时不受private和protected访问限制。

    注意:不要试图在头文件中定义静态数据成员。在大多数情况下,这样做会引起重复定义这样的错误。

    2. 静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象和基类对象共享基类的静态数据成员。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class base{
     5     public:
     6         static int _num;
     7 };
     8 
     9 int base::_num = 0;
    10 
    11 class derived : public base
    12 {
    13 };
    14 
    15 int main()
    16 {
    17     base a;
    18     derived b;
    19     a._num++;
    20     cout << "base class static data _num is : " << a._num << endl;
    21     b._num++;
    22     cout << "derived class static data _num is : " << b._num << endl;
    23     return 0;
    [zengtx@cmm03node02 test]$./a.out 
    base class static data _num is : 1
    derived class static data _num is : 2

    由以上程序的执行结果可知,派生类和基类的对象共用一个静态数据成员。

    3. 静态数据成员可以成为成员函数的可选参数,而普通成员函数则不可以。

    4. 静态数据成员的类型可以是所属类的类型,而普通数据成员却不可以。

     1 class base{
     2     public:
     3         static base _object1; // 正确,静态数据成员
     4         base _object2;  // 错误
     5         };
    

       

     参考

    http://www.jb51.net/article/72387.htm

    http://www.jb51.net/article/41775.htm

  • 相关阅读:
    Jmeter的几种参数化方式
    selenium实现原理
    python问题
    跨域问题的解决方案
    jquery的ajax的语法
    给JavaScript 对象添加方法
    循环遍历对象的属性
    Function专题 以及js的预解析理解
    如何理解javascript中类和对象这两个概念?
    封装原生ajax
  • 原文地址:https://www.cnblogs.com/zengtx/p/6404536.html
Copyright © 2020-2023  润新知