2012-02-08 75 views
-2

C++中的靜態方法的含義是什麼? 據我所知它和Java一樣:沒有必要爲了調用靜態方法而創建類的實例。 我記得,在C語言中,我們使用靜態聲明來使它們變爲私有。 如何在C++中創建私有方法? 比方說,我要計算與輔助函數的一些計算:C++中的靜態方法

class A{ 
    foo(); 
}; 

A::foo(){ 
    int a=doSomCalculations(); 
} 

我如何定義doSomecalculations所以這將是彷彿私有的輔助方法,在Java中?

回答

0

在C++中,如果你不明確狀態的東西是public,這將是private默認。所以如果你想讓foo()在你的課堂上成爲public,你需要這樣說。

class A{ 
public: 
    foo(); 
private: 
    void doSomCalulations(); 
}; 

A::foo(){ 
    int a=doSomCalculations(); 
} 

作爲你的C static事情評論,我不知道任何東西說static使得任何private在C. C沒有的privatepublic概念。在C中,您只有struct類型,默認情況下全部爲public

在C++ struct默認情況下所有成員public。如果你想在一個struct一個private成員,你必須明確地說明它,就像這樣:

struct my_struct 
{ 
int some_public_member; 

private: 
int my_private_member; 
}; 

OTOH,有在C,這意味着internal linkagestatic。也許你是這樣指的。

+0

如果它在'struct'中呢? ;) – Nim 2012-02-08 10:07:55

+0

@Nim在我的答案中添加了一些數據 – 2012-02-08 10:34:59

0

靜態INT doSomCalculations(){ ... }

(我不能點擊此處查看)。

+0

我能問爲什麼這個解決方案是降級?這類似於某些else回答誰詳述了更多。 – 2012-02-08 10:10:19

+0

我沒有downvote,但也許是因爲你沒有詳細說明? – nabulke 2012-02-08 10:30:31

+0

謝謝你,我很新的計算器,所以我會花更多的時間到我未來的答案。 – 2012-02-08 10:36:29

1

正如你所說,靜態方法並不要求你有一個對象的實例。 該方法在該對象的實例之間共享。 在C++中,您可以通過以下方式聲明一個私有方法:

class YourClass { 
    public: 
    void publicMethod(); 
    private: 
    void privateMethod(); 
}; 
1

您得到在一類背景與「私人」糊塗文件範圍「靜態」。

爲了在一個類中的方法或數據項是私有的,只是把它的「私人」而不是類的公共部分,這

class Foo 
{ 
    private: 
    int dosomething(); 
    public: 
    Foo(); 
}; 

然後DoSomething的()只能在Foo的方法中調用。靜態函數

class Foo { public: static wibble(); } 

會像在Java satic功能,你可以在無需一個Foo實例調用foo ::維布勒()。

我相信在文件鏡頭中使用靜態是不推薦使用的,我們鼓勵使用匿名名稱空間來代替。

static int iamrunninoutofnames() { .... } 

對聲明的文件是全局的,但在文件外部不可用。

namespace { int iamrunninoutofnames() { .... } } 

實際上是相似的,但如果你仔細使用它可以更加靈活。