詳解C++編程中的靜態(tài)成員與可變數(shù)據(jù)成員
靜態(tài)成員
類可以包含靜態(tài)成員數(shù)據(jù)和成員函數(shù)。當數(shù)據(jù)成員被聲明為“靜態(tài)”時,只會為類的所有對象保留一個數(shù)據(jù)副本。
靜態(tài)數(shù)據(jù)成員不是給定的類類型的對象的一部分。因此,靜態(tài)數(shù)據(jù)成員的聲明不被視為一個定義。在類范圍中聲明數(shù)據(jù)成員,但在文件范圍內(nèi)執(zhí)行定義。這些靜態(tài)類成員具有外部鏈接。下面的示例闡釋了這一點:
// static_data_members.cpp
class BufferedOutput
{
public:
// Return number of bytes written by any object of this class.
short BytesWritten()
{
return bytecount;
}
// Reset the counter.
static void ResetCount()
{
bytecount = 0;
}
// Static member declaration.
static long bytecount;
};
// Define bytecount in file scope.
long BufferedOutput::bytecount;
int main()
{
}
在前面的代碼中,該成員 bytecount 在類 BufferedOutput 中聲明,但它必須在類聲明的外部定義。
在不引用類類型的對象的情況下,可以引用靜態(tài)數(shù)據(jù)成員??梢垣@取使用 BufferedOutput 對象編寫的字節(jié)數(shù),如下所示:
long nBytes = BufferedOutput::bytecount;
對于存在的靜態(tài)成員,類類型的所有對象的存在則沒有必要。還可以使用成員選擇(. 和 –>)運算符訪問靜態(tài)成員。例如:
BufferedOutput Console; long nBytes = Console.bytecount;
在前面的示例中,不會評估對對象(Console) 的引用;返回的值是靜態(tài)對象 bytecount 的值。
靜態(tài)數(shù)據(jù)成員遵循類成員訪問規(guī)則,因此只允許類成員函數(shù)和友元擁有對靜態(tài)數(shù)據(jù)成員的私有訪問權(quán)限。
可變數(shù)據(jù)成員
此關鍵字只能應用于類的非靜態(tài)和非常量數(shù)據(jù)成員。如果某個數(shù)據(jù)成員被聲明為 mutable,則從 const 成員函數(shù)為此數(shù)據(jù)成員賦值是合法的。
語法
mutable member-variable-declaration;
備注
例如,以下代碼在編譯時不會出錯,因為 m_accessCount 已聲明為 mutable,因此可以由 GetFlag 修改,即使 GetFlag 是常量成員函數(shù)。
// mutable.cpp
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};
int main()
{
}
- C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別
- C/C++ 中堆和棧及靜態(tài)數(shù)據(jù)區(qū)詳解
- C和C++中的基本數(shù)據(jù)類型的大小及表示范圍詳解
- C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法
- C/C++中輸入多組數(shù)據(jù)的方法
- C++數(shù)據(jù)精度問題的解決方案(對浮點數(shù)保存指定位小數(shù))
- C++數(shù)據(jù)結(jié)構(gòu)之文件壓縮(哈夫曼樹)實例詳解
- 關于C++靜態(tài)數(shù)據(jù)成員的實現(xiàn)講解
相關文章
Linux環(huán)境g++編譯GDAL動態(tài)庫操作方法
下面小編就為大家?guī)硪黄狶inux環(huán)境g++編譯GDAL動態(tài)庫操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
C/C++ winsock實現(xiàn)不同設備實時通訊的示例代碼
這篇文章主要為大家詳細介紹了C/C++如何利用winsock連接實現(xiàn)不同設備實時通訊,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-09-09
Visual Studio2022+QT6創(chuàng)建桌面應用實現(xiàn)
本文主要介紹了Visual Studio2022+QT6創(chuàng)建桌面應用實現(xiàn),文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02
C++調(diào)用EasyX庫實現(xiàn)嫦娥奔月小游戲
這篇文章主要為大家詳細介紹了C++如何調(diào)用EasyX庫編寫一個簡單的嫦娥奔月小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下2023-09-09

