關於c++靜態類的說法


看了網上的觀點,大致有這幾種比較好的。

觀點一:根據現代的C++觀點,靜態類沒有必要存在於C++中。

一個類是對一個概念的描述,類的本質是它維護了一個不變式,也就是說它有一個狀態,它所有的接口都是為了訪問或者獲取這個狀態以及跟狀態相關的操作。一個靜態類沒有狀態,因此就沒有必要成為一個類。在C++中靜態方法不如非靜態非類的成員方法好,尤其是使用了模板的情況下。

我的疑問:如果只聲明類起顯示作用呢?

觀點二:C++里不可能有靜態類的說法,相反,在Java里倒是有這么一說。
C++由於具有傳值、傳址、啞元功能,使用靜態類不僅多余而且也完全沒有必要,相反,對Java、C#之類“改進型語言”來說,由於為避免指針,防止過多的產生對象實例,就必須額外的引入一些新的“先進性”的東西,比如靜態類。然而,靜態類本身是一個半成品(或是終極產品),由於其無法繼承,靜態類的產品化會因為不便升級而成為一種垃圾。
同樣,即便是在Java里,靜態類的作用也僅相當於包含靜態實例的C++類型定義,然而從語義上還沒有C++定義的直觀,為了對付一個小小的指針,避免偽引用,有必要做這么大的動作嗎?我對此感到不值。

 

觀點三:C#或Java的
類可以聲明為 static 的,以指示它僅包含靜態成員。不能使用 new 關鍵字創建靜態類的實例。靜態類在加載包含該類的程序或命名空間時由 .NET Framework 公共語言運行庫 (CLR;特指:C#語言) 自動加載。 
靜態類只用於包含靜態成員的類型,它既不能實例化,靜態類的特性是防止繼承,防止外部來NEW。
所以C++中不存在靜態類
觀點四:使用靜態類來包含不與特定對象關聯的方法。 例如,創建一組不操作實例數據並且不與代碼中的特定對象關聯方法是很常見的要求。您應該使用靜態類來包含那些方法。
靜態類的主要功能如下:
    它們僅包含靜態成員。(僅包含靜態成員不是上面說的包含不操作實例數據,不與對象關聯矛盾嗎?)
    它們不能被實例化。
    它們是密封的。
    它們不能包含實例構造函數(C# 編程指南)。
    靜態類不能使用abstract或sealed修飾符。
    靜態類默認繼承自System.Object根類,不能顯式指定任何其他基類。
    靜態類不能指定任何接口實現(不能有接口實現,那起什么作用)。
    靜態類的成員不能有protected或protected internal訪問保護修飾符。

觀點五:

 

靜態類和靜態類成員(C# 編程指南)

靜態類和類成員用於創建無需創建類的實例就能夠訪問的數據和函數。靜態類成員可用於分離獨立於任何對象標識的數據和行為:無論對象發生什么更改,這些數據和函數都不會隨之變化。當類中沒有依賴對象標識的數據或行為時,就可以使用靜態類。

結論:

當一個類完全脫離實例數據和對象時可以使用靜態類。

靜態類可以有自己的成員變量和成員函數,但都必須是靜態的。對靜態成員變量只能是程序運行開始時初始化,不能在類內初始化。

靜態類沒有基類。



版權聲明:本文為博主原創文章,未經博主允許不得轉載。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM