詳解C++編程中的靜態成員與可變數據成員。本站提示廣大學習愛好者:(詳解C++編程中的靜態成員與可變數據成員)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++編程中的靜態成員與可變數據成員正文
靜態成員
類可以包括靜態成員數據和成員函數。當數據成員被聲明為“靜態”時,只會為類的一切對象保存一個數據正本。
靜態數據成員不是給定的類類型的對象的一部門。是以,靜態數據成員的聲明不被視為一個界說。在類規模中聲明數據成員,但在文件規模內履行界說。這些靜態類成員具有內部鏈接。上面的示例闡釋了這一點:
// 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 中聲明,但它必需在類聲明的內部界說。
在不援用類類型的對象的情形下,可以援用靜態數據成員。可以獲得應用 BufferedOutput 對象編寫的字節數,以下所示:
long nBytes = BufferedOutput::bytecount;
關於存在的靜態成員,類類型的一切對象的存在則沒有需要。還可使用成員選擇(. 和 –>)運算符拜訪靜態成員。例如:
BufferedOutput Console; long nBytes = Console.bytecount;
在後面的示例中,不會評價對對象(Console) 的援用;前往的值是靜態對象 bytecount 的值。
靜態數據成員遵守類成員拜訪規矩,是以只許可類成員函數和友元具有對靜態數據成員的公有拜訪權限。
可變數據成員
此症結字只能運用於類的非靜態和異常量數據成員。假如某個數據成員被聲明為 mutable,則從 const 成員函數為此數據成員賦值是正當的。
語法
mutable member-variable-declaration;
備注
例如,以下代碼在編譯時不會失足,由於 m_accessCount 已聲明為 mutable,是以可以由 GetFlag 修正,即便 GetFlag 是常量成員函數。
// mutable.cpp class X { public: bool GetFlag() const { m_accessCount++; return m_flag; } private: bool m_flag; mutable int m_accessCount; }; int main() { }