关于c++静态类的说法
關于C++的靜態類和C#中的靜態類的比較
在C++中,類不能有static修飾,
**C++靜態類是指只用于包含靜態成員的類型,不能進行實例化。**當我們聲明類的成員為靜態時,這意味著無論創建多少個類的對象,靜態成員都只有一個副本。靜態成員在類的所有對象中是共享的。
我們不能把靜態成員的初始化放置在類的定義中,但是可以在類的外部通過使用范圍解析運算符 :: 來重新聲明靜態變量從而對它進行初始化。
靜態函數只要使用類名加范圍解析運算符 :: 就可以訪問。
靜態成員函數只能訪問靜態成員數據、其他靜態成員函數和類外部的其他函數。
靜態成員函數有一個類范圍,他們不能訪問類的 this 指針。
靜態成員函數與普通成員函數的區別:- 靜態成員函數沒有 this 指針,只能訪問靜態成員(包括靜態成員變量和靜態成員函數)。- 普通成員函數有 this 指針,可以訪問類中的任意成員;而靜態成員函數沒有 this 指針。而C#中:
靜態類是有static修飾的,
那為什么靜態類沒有必要存在C++中呢?
一個類是對一個概念的描述,類的本質是它維護了一個不變式,也就是說它有一個狀態,它所有的接口都是為了訪問或者獲取這個狀態以及跟狀態相關的操作。一個靜態類沒有狀態,因此就沒有必要成為一個類。
C++由于具有傳值、傳址、啞元功能,使用靜態類不僅多余而且也完全沒有必要,相反,對Java、C#之類“改進型語言”來說,由于為避免指針,防止過多的產生對象實例,就必須額外的引入一些新的“先進性”的東西,比如靜態類。然而,靜態類本身是一個半成品(或是終極產品),由于其無法繼承,靜態類的產品化會因為不便升級而成為一種垃圾。
在《C#編程指南》中:
靜態類和類成員用于創建無需創建類的實例就能夠訪問的數據和函數。靜態類成員可用于分離獨立于任何對象標識的數據和行為:無論對象發生什么更改,這些數據和函數都不會隨之變化。
當類中沒有依賴對象標識的數據或行為時,就可以使用靜態類。
有此可見:
C++與C#關于靜態類有區別。
C#中,可以指定一個靜態的類。而C++中可以在類中聲明靜態的成員的類型。 當一個類權卻脫離實例數據和對象時可以使用靜態類(C++中靜態的成員類型),對靜態成員變量智能是程序運行時初始化,不能在類內初始化。靜態類不需要,也沒有基類。
例如,在C++編程中,需要用到一個公共的數據,可以單獨聲明一個類,
class ShareData { public:static QList<QByteArray> list;static QList<QString> listTest;static QList<tagPosInfo_t> webTagInfoSendlist;static uint16_t onlineAncNum;static uint16_t totalAncNUm;};在,類的外部初始化該靜態數據:
//定義全局變量 QList<QByteArray> ShareData::list = QList<QByteArray>();QList<QString> ShareData::listTest = QList<QString>();QList<tagPosInfo_t> ShareData::webTagInfoSendlist = QList<tagPosInfo_t>();uint16_t ShareData:: onlineAncNum = 0; uint16_t ShareData:: totalAncNUm = 0;總結
以上是生活随笔為你收集整理的关于c++静态类的说法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt中qDebug()技巧初探
- 下一篇: C++ VS C# 结构体和对象的细微区