C++ 類中的static成員的初始化和特點


C++ 類中的static成員的初始化和特點

#include <iostream>

using namespace std;

class Test
{
public:
    Test() : y(1), r(y), d(3){} //對於常量型成員變量和引用型成員變量,必須通過參數化列表的方式進行初始化。
    ~Test(){}

    int y;      //普通變量成員
    int &r;     //引用成員變量
    const int d;    //常量成員變量
    static int c;   //靜態成員變量
    static const int x = 2.1;   //靜態常量整型成員變量
    static const int xx;        //靜態常量整型成員變量聲明
    static const double z;  //靜態常量非整型成員變量聲明
    static const float zz = 6.6;    //靜態常量非整型成員變量
};


const int Test::xx = 4; //靜態常量整型成員變量定義
const double Test::z = 5.1; ////靜態常量非整型成員變量定義
int Test::c = 2;

int main(void)
{
    cout << Test::x << endl;    

    return 0;
}

  

這些特殊類型的成員變量主要有:

1. 引用
2. 常量
3. 靜態變量
4. 靜態整型常量
5. 靜態非整型常量

對於==1. 引用==和==2. 常量==,成員變量必須通過構造函數的==參數列表==的方式初始化。例如:上述程序中的r 和 d 變量的初始化。

對於==3. 靜態變量==,static成員變量需要在類定義體外進行初始化與定義,因為static數據成員獨立該類的任意對象存在,它是與類關聯的對象,不與類對象關聯。例如:上述程序中的c變量的初始化。

對於==4. 靜態整型常量==,該類型成員可以直接在類中初始化,也可以在類中聲明,在類定義體外進行定義。例如:上述程序中的x和xx變量。

對於==5. 靜態非整型常量==,該類型也是可以在類中聲明在類定義體外進行定義,或者直接在類中定義初始化。例如:上述程序中的z和zz變量。

結論:
靜態成員屬於類作用域,但不屬於類對象,它的生命周期和普通的靜態變量一樣,程序運行時進行分配內存和初始化,程序結束時則被釋放。所以不能在類的構造函數中進行初始化。

static成員的優點
static成員的名字是在類的作用域中,因此可以避免與其它類成員或全局對象名字沖突。
可以實施封裝,static成員可以是私有的,而全局對象不可以。
閱讀程序容易看出static成員與某個類相關聯,這種可見性可以清晰地反映程序員的意圖。
static成員函數特點
因為static成員函數沒有this指針,所以靜態成員函數不可以訪問非靜態成員。
非靜態成員函數可以訪問靜態成員。
靜態數據成員與類的大小無關,因為靜態成員只是作用在類的范圍而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM