天天看點

C++類中的Static關鍵字二

靜态成員是可以獨立通路的,也就是說,無須建立任何對象執行個體就可以通路,而靜态成員函數可不建立對象就可以被使用。

  或者說靜态函數與一般函數沒有太大的差別,隻是通路有限制,靜态變量跟一般的全局變量的差別就是通路有限制。

static變量

static變量不像普通的變量,static變量獨立于一切類對象處在。static修飾的變量先于對象存在,是以static修飾的變量要在類外初始化。因為static是所有對象共享的東西嘛,必須要比對象先存在的

class test
{
private:
public:
    static int i;
};
int test::i = 100;
//此句包含了聲明和指派,初始化不受private和protected通路限制,但是若是priivate,
//下面main函數就無法通路
int main()
{
    cout << test::i << endl;
    return 0;
}
      

  

好處:用static修飾的成員變量在對象中是不占記憶體的,因為他不是跟對象一起在堆或者棧中生成,用static修飾的變量在靜态存儲區生成的,是以用static修飾一方面的好處是可以節省對象的記憶體空間。是以一般類const變量一般改為static const變量,可以節省一些空間。

---恢複内容結束---

靜态成員是可以獨立通路的,也就是說,無須建立任何對象執行個體就可以通路,而靜态成員函數可不建立對象就可以被使用。

  或者說靜态函數與一般函數沒有太大的差別,隻是通路有限制,靜态變量跟一般的全局變量的差別就是通路有限制。

static變量

static變量不像普通的變量,static變量獨立于一切類對象處在。static修飾的變量先于對象存在,是以static修飾的變量要在類外初始化。因為static是所有對象共享的東西嘛,必須要比對象先存在的

class test
{
private:
public:
    static int i;
};
int test::i = 100;//此句包含了聲明和指派,初始化不受private和protected通路限制,但是若是priivate,下面main函數就無法通路
int main()
{
    cout << test::i << endl;
    return 0;
}
      

  

好處:用static修飾的成員變量在對象中是不占記憶體的,因為他不是跟對象一起在堆或者棧中生成,用static修飾的變量在靜态存儲區生成的,是以用static修飾一方面的好處是可以節省對象的記憶體空間。是以一般類const變量一般改為static const變量,可以節省一些空間。

static成員函數          

static函數也是類函數,是以在寫定義時也要寫明屬于哪個類。與不同類函數不同的是,它沒有傳入this指針,正因為沒有this指針,是以static類成員函數不能通路非static的類成員,隻能通路 static修飾的類成員。

  靜态成員函數不可以同時聲明為 virtual、const、volatile函數。

繼續閱讀