zoukankan      html  css  js  c++  java
  • C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转

     有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:

    a.引用

    b.常量

    c.静态

    d.静态常量(整型)

    e.静态常量(非整型)

        常量和引用,必须通过参数列表进行初始化。
        静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。

    参考下面的代码以及其中注释:
     

    Java代码  收藏代码
    1. #include <iostream>  
    2. using namespace std;  
    3.   
    4. class BClass  
    5. {  
    6. public:  
    7.  BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化  
    8.                                                 //普通成员变量也可以放在函数体里,但是本质其实已不是初始化,而是一种普通的运算操作-->赋值运算,效率也低  
    9. private:  
    10.  int i;                                  // 普通成员变量  
    11.  const int ci;                           // 常量成员变量  
    12.  int &ri;                                // 引用成员变量  
    13.  static int si;                          // 静态成员变量  
    14.  //static int si2 = 100;                 // error: 只有静态常量成员变量,才可以这样初始化  
    15.  static const int csi;                   // 静态常量成员变量  
    16.  static const int csi2 = 100;            // 静态常量成员变量的初始化(Integral type)    (1)  
    17.  static const double csd;                // 静态常量成员变量(non-Integral type)  
    18.  //static const double csd2 = 99.9;      // error: 只有静态常量整型数据成员才可以在类中初始化  
    19. };  
    20.   
    21. //注意下面三行:不能再带有static  
    22. int BClass::si = 0; // 静态成员变量的初始化(Integral type)  
    23. const int BClass::csi = 1; // 静态常量成员变量的初始化(Integral type)  
    24. const double BClass::csd = 99.9; // 静态常量成员变量的初始化(non-Integral type)  
    25.   
    26. // 在初始化(1)中的csi2时,根据著名大师Stanley B.Lippman的说法下面这行是必须的。  
    27. // 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。  
    28. const int BClass::csi2;  
    29.   
    30. int main()  
    31. {  
    32.      BClass b;  
    33.      return 0;  
    34. }  

      静态成员属于类作用域,但不属于类对象,和普通的static变量一样,程序一运行就分配内存并初始化,生命周期和程序一致。
    所以,在类的构造函数里初始化static变量显然是不合理的。
    静态成员其实和全局变量地位是一样的,只不过编译器把它的使用限制在类作用域内(不是类对象,它不属于类对象成员),要在类的定义外(不是类作用域外)初始化。

  • 相关阅读:
    LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element
    LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word
    LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
    LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four
    LeetCode225 Implement Stack using Queues
    LeetCode150 Evaluate Reverse Polish Notation
    LeetCode125 Valid Palindrome
    LeetCode128 Longest Consecutive Sequence
    LeetCode124 Binary Tree Maximum Path Sum
    LeetCode123 Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/Erdos001/p/4484854.html
Copyright © 2011-2022 走看看