詳解C++編程中的靜態(tài)成員與可變數(shù)據(jù)成員
靜態(tài)成員
類可以包含靜態(tài)成員數(shù)據(jù)和成員函數(shù)。當(dāng)數(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ù)成員
此關(guān)鍵字只能應(yīng)用于類的非靜態(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)之文件壓縮(哈夫曼樹)實例詳解
- 關(guān)于C++靜態(tài)數(shù)據(jù)成員的實現(xiàn)講解
相關(guān)文章
C語言 function recursion函數(shù)遞歸詳解
遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法,舉個例子: 從前有座山,山里有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去2021-10-10
Win10中VC2013安裝Unit test組件出現(xiàn)問題解決方案
本文給大家分享的是個人在Win10中VC2013安裝Unit test組件出現(xiàn)問題并最終找到解決辦法的過程,有需要的小伙伴可以參考下2016-03-03
C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色
這篇文章主要介紹了C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色,需要的朋友可以參考下2019-04-04

