程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 講講c++ Session 3:靜態成員(變量,函數)

講講c++ Session 3:靜態成員(變量,函數)

編輯:C++入門知識

講講c++ Session 3:靜態成員(變量,函數)


靜態成員:在說明前面加了static關鍵字的成員。\在C++中,靜態成員是屬於整個類的而不是某個對象,靜態成員變量只存儲一份供所有對象共用。所以在所有對象中都可以共享它。
設立原因:使用靜態成員變量實現多個對象之間的數據共享不會破壞隱藏的原則,保證了安全性還可以節省內存。

程序實例:

class CRectangle
{
private:
int w, h;
static int nTotalArea; //靜態成員變量
static int nTotalNumber;
public:
CRectangle(int w_,int h_);
~CRectangle();
static void PrintTotal(); //靜態成員函數
};
訪問靜態成員:
1) 類名::成員名
CRectangle::PrintTotal();
2) 對象名.成員名
CRectangle r; r.PrintTotal();
3) 指針->成員名
CRectangle * p = &r; p->PrintTotal();
4) 引用.成員名
CRectangle & ref = r; int n = ref.nTotalNumber;


注意Tips:
在靜態成員函數中,不能訪問非靜態成員變量,也不能調用非靜態成員函數。
例如:

void CRectangle::PrintTotal()
{
cout << w << "," << nTotalNumber << "," << nTotalArea << endl; //wrong
}
CRetangle::PrintTotal(); //解釋不通,w 到底是屬於那個對象的?
CRectangle::CRectangle(int w_,int h_)
{
w = w_;
h = h_;
nTotalNumber ++;
nTotalArea += w * h;
}
CRectangle::~CRectangle()
{
nTotalNumber --;
nTotalArea -= w * h;
}
void CRectangle::PrintTotal()
{
cout << nTotalNumber << "," << nTotalArea << endl;
}


錯誤原因:
在使用CRectangle類時,有時會調用復制構造函數生成臨時的隱藏的CRectangle對象,調用一個以CRectangle類對象作為參數的函數時和調用一個以CRectangle類對象作為返回值的函數時,臨時對象在消亡時會調用析構函數,減少nTotalNumber 和nTotalArea的值,可是這些臨時對象在生成時卻沒有增加nTotalNumber 和 nTotalArea的值。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved