簡體   English   中英

C ++中靜態成員函數的用途?

[英]Purpose of a static member function in C++?

如果每個成員函數每個類只包含一次(由所有實例共享),那么聲明成員函數靜態的目的究竟是什么? 它是否像被聲明為const的函數一樣,因為它修改了特定類型的數據(在本例中是靜態數據成員)?

普通成員函數需要運行類實例。 可以直接調用靜態方法,而無需先創建類的實例。

正常方法:

MyClass myClass;
myClass.NormalMethod();

靜態方法:

MyClass::StaticMethod();

因此,常規方法非常適合使用類數據的函數。 如果一個方法不需要使用類數據,那么它將成為可能被靜態化的候選者。

類方法(靜態或其他方法)可以訪問該類的任何對象的私有成員,而不僅僅是它自己的實例。 靜態方法也是如此,除非您將實例傳遞給實例,否則它們沒有實例。

您還可以使用自由函數並將其聲明為朋友,但是自由函數意味着可以對不同類的對象進行操作的更高級別的抽象。 一個靜態類方法說“我只根據我的班級才有意義”

靜態方法的一個應用是創建實例和返回指針。 例如,可能存在調用者不應該知道的派生類 - “factory”函數知道要使用哪個派生類。

當然,當您需要創建一個對象時,您可能還沒有一個對象可用於此,即使您這樣做,其他對象也不相關。

基本上,有時某些操作是類提供的抽象的一個方面,但該操作與特定對象無關 - 或者至少不是已存在的對象。 在這種情況下,您應該將操作實現為靜態函數。

類似地,一些數據與類提供的抽象有關,但與該類的特定實例無關。 該數據可能最好作為靜態成員變量實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM