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

2021-06-03 21:11:55 字數 1126 閱讀 5467

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

靜態成員:靜態類中的成員加入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<)為乙個類的物件或指向類物件的指標呼叫靜態成員函式,

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

我們學到的類物件的成員變數一般都是這個物件專屬,不能為其他物件所共有。然而在實際程式設計中我們需要統計物件的數量等問題,所以就必須設定乙個類的物件所共有的變數,就是靜態成員變數。首先通過乙個簡單的例程 說明靜態成員如何使用。includeusing namespace std class a vir...

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

本章內容均為coursera中c 程式設計課件的整理 基本概念 靜態成員 在說明前面加了static關鍵字的成員。class crectangle 普通成員變數每個物件有各自的乙份,而靜態成員變數一共就乙份,為所有物件共享。sizeof 運算子不會計算靜態成員變數。class cmyclass 則 ...

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

靜態成員提供乙個同類成員的共享機制 static 關鍵字可以說明乙個類的成員 把乙個類的成員說成說明成 ststic 時,這個類無論有多少物件被建立 這些物件共享這個static 成員 靜態成員變數 include using namespace std class bb void addc pro...