C 靜態成員變數和靜態成員函式

2021-07-03 22:59:20 字數 1577 閱讀 9382



資料成員可以分靜態變數、非靜態變數兩種. 

靜態成員:靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員..因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜態的成員. 

非成靜態員:所有沒有加static的成員都是非靜態成員,當類被例項化之後,可以通過例項化的類名進行訪問..非靜態成員的生存期決定於該類的生存期..而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在內容中.. 

乙個類中也可以包含靜態成員和非靜態成員,類中也包括靜態建構函式和非靜態建構函式.. 

分兩個方面來總結,第一方面主要是相對於面向過程而言,即在這方面不涉及到類,第二方面相對於物件導向而言,主要說明static在類中的作用。 

一、在面向過程設計中的static關鍵字 

1、靜態全域性變數 

定義:在全域性變數前,加上關鍵字 static 該變數就被定義成為了乙個靜態全域性變數。 

特點: 

a、該變數在全域性資料區分配記憶體。 

b、初始化:如果不顯式初始化,那麼將被隱式初始化為0(自動變數是隨機的,除非顯式地初始化)。 

c、訪變數只在本原始檔可見,嚴格的講應該為定義之處開始到本檔案結束。 

例(摘於c++程式設計教程---錢能主編p103):          

//example 1 

#include

void fn(); 

static int n; //定義靜態全域性變數 

void main() 

void fn() 

void fn()//定義靜態函式 

;int myclass::sum=0;//定義並初始化靜態資料成員

myclass::myclass(int a,int b,int c) 

void myclass::getsum() ; 

int myclass::sum=0;//定義並初始化靜態資料成員 

myclass::myclass(int a,int b,int c)   

void myclass::getsum() //靜態成員函式的實現 

// cout < 靜態成員函式由於不是與任何的物件相聯絡,因此它不具有this指標。從這個意義上講,它無法訪問屬於類物件的非靜態資料成員,也無法訪問非靜態成員函式,它只能呼叫其餘的靜態成員函式。

cout < <"sum=" < 靜態成員之間可以相互訪問,包括靜態成員函式訪問靜態資料成員和訪問靜態成員函式; 

非靜態成員函式可以任意地訪問靜態成員函式和靜態資料成員; 

靜態成員函式不能訪問非靜態成員函式和非靜態資料成員; 

由於沒有this指標的額外開銷,因此靜態成員函式與類的全域性函式相比速度上會有少許的增長; 

呼叫靜態成員函式,可以用成員訪問操作符(.)和(->)為乙個類的物件或指向類物件的指標呼叫靜態成員函式.

C 靜態成員變數和靜態成員函式

資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...

C 靜態成員變數和靜態成員函式

靜態成員變數和靜態資料成員並不屬於某乙個類物件,而是整個類,為所有物件共有,下面介紹 靜態成員變數和靜態資料成員的一些特徵 class a int tmain int argc,tchar argv 結果如下 1 class a const char a c b 可以通過作用域操作符,類的物件,引用...

C 靜態成員變數和靜態成員函式

原文 注意 類中靜態變數在類外初始化格式 資料型別 類名 靜態資料成員名 值 加上宣告是為了在建構函式之前執行。private inta,b,c static const intsum 宣告靜態資料成員 const intmyclass sum 定義並初始化靜態資料成員 資料成員可以分靜態變數 非靜...