C ++静态方法(在不同的类中)(与Java一样)

时间:2012-03-07 01:04:40

标签: c++ class reference static

当我有多个.cpp文件时,如何制作像java中的静态方法一样使用的静态方法?

在java中,您可以使用MyClass name = new MyClass()来引用另一个类;当你在任何其他文件中调用时,这个类中的每个变量都是相同的。

我似乎很难通过参考MyClass&在要使用该类的每个函数中的名称。

有没有办法在.cpp文件的顶部定义MyClass名称,而不会在内存中创建该对象的全新实例并消除所有进度,例如,如果您尝试创建一个简单的计数器,主类会告诉计数类增加,可见性类将从计数类中获取计数数并将其打印到屏幕上。现在这很简单,因为你可以将计数类传递给可见性,但是如果你有20多个方法,那么就很难跟踪。

我对静态或引用并不熟悉,而且我环顾四周并看到了“命名空间”,但我不确定在哪里定义它,或者它是否是我甚至需要的。

提前致谢

示例Java代码:

public class Foo{
private static int counter = 0;

public int getCounter(){
    return counter;
}

public void incrCounter(){
    counter+=1;
}
}

public class MainProg{
public static void main(String[] args){
    Foo foo = new Foo();
    Display disp = new Display();
    foo.incrCounter();
    foo.incrCounter();
    disp.displayCounter();
}
}

public class Display{
Foo foo = new Foo();
public void displayCounter(){
    foo.incrCounter();
    System.out.println(foo.getCounter());
}
}

这应打印出“3”

2 个答案:

答案 0 :(得分:2)

在C ++中,在Java中使用范围解析运算符::而不是.。你可以调用这样的静态方法:

在标题中:

class MyClass {
public:
    static int myPrivateStaticVar;
    static void myStaticMethod();
};

在cpp文件中:

#include "myfile.h"
#include <iostream>

using namespace std;

int MyClass::myPrivateStaticVar = 123;

void MyClass::myStaticMethod() {
    cerr << "hello, world! " << myPrivateStaticVar  << endl;
}

int main() {
    MyClass::myStaticMethod();
}

您的静态方法myStaticMethod需要在MyClass类中公开。

答案 1 :(得分:0)

  

在Java中,您可以根据需要访问其他任何类中的类,只要变量是静态的,您访问的类中的值将始终相同。

你的意思是,就像一个全局变量?您可以声明这样的全局变量:

extern int foo;

你需要一个定义,它是这样的:

int foo = 42;

如果将声明放入需要的任何地方的头文件中,声明将会正常工作,定义应该放在一个源文件中。