static資料成員 static成員函式

2021-08-30 20:13:17 字數 1143 閱讀 7664

類的static資料成員的引入:

不同物件之間共享訪問,本質上是對該型別所有物件,只維持乙份拷貝。

與全域性變數相比,優勢:

1. 靜態資料成員仍然是在類域名字空間,沒用進入程式的全域性名字空間,因此不存在與程式中其他全域性名字衝突的可能。

2. 可以實現資訊隱藏,靜態資料成員可以是private成員,全域性變數不行。

使用static資料成員的注意事項:

1. 靜態資料成員必須在類定義外初始化,但const靜態資料成員除外,const靜態資料成員可以在類體中初始化。

//類體c1.h

class c1

;

//類實現c1.cpp

#include "c1.h"

int c1::num = 20;

const string name ; //仍然需要在類體外定義

void c1::..

2. 類成員函式(無論是static成員函式或非static成員函式)都可以直接訪問static資料成員。

3. 訪問方式有兩種:  object.static_var 或   classname::static_var

static資料成員的特殊性:

1. static資料成員的型別可以是其所屬類,而非static資料成員型別只允許為該類的指標或引用。

class bar

;

2. 靜態資料成員可以作為類成員函式的預設引數,而非static成員不能。

分析:靜態成員函式如果未初始化,系統自動會給它初始化為某個預設值(如int初始化為0, 指標初始化為null等)。 所以一旦定義,其值已確定,可以作為類成員函式的預設引數。

static成員函式的引入:

如果某成員函式只訪問static資料成員,而不訪問任何其他的資料成員(非static),那麼此成員函式就與哪個物件來呼叫無關。

1. 只在類體的函式宣告前加static, 類體外函式定義不能指定關鍵字static

2. 靜態成員函式沒有this指標

3. 訪問方式也有兩種

再看static資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態資料成員的用途之一是統計有多少個物件實際存在。靜態資料成員不能在類中初始化,實際上類定義只是在描...

static 成員變數以及static成員函式

靜態成員變數必須在類外實現初始化。靜態資料成員儲存在靜態儲存區,在程式整個執行期間都存在。sizeof 類名student sizeof 物件名s1 為不包含靜態資料成員的記憶體大小。常用來解決計數問題 include using namespace std class student static...

static成員和非static成員

1.靜態成員 1 所有的static方法不允許呼叫非static定義的屬性或方法,因為靜態函式成員屬於類的成員,例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件,但是靜態方法可以使用靜態變數 2 描述共享屬性,只需在屬性前新增static關鍵字即可,建立乙個類的多個例項,其stat...