2012-02-08 76 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() { .... } } 

实际上是相似的,但如果你仔细使用它可以更加灵活。