C++ C++;静态方法(在不同的类中)(如Java)

C++ C++;静态方法(在不同的类中)(如Java),c++,class,reference,static,C++,Class,Reference,Static,当我有多个.cpp文件时,我将如何制作像java中的静态方法一样使用的静态方法 在java中,可以使用MyClass name=new MyClass()引用另一个类;这个类中的每个变量在您拥有的任何其他文件中调用时都是相同的 在您想要使用该类的每个函数中,都必须能够通过引用传递MyClass&name,这似乎是一种痛苦 有没有一种方法可以在.cpp文件的顶部定义MyClass name,而不必在内存中创建该对象的全新实例并擦除所有进程,例如,如果您试图创建一个简单的计数器,并且主类会告诉计数类

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

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

在您想要使用该类的每个函数中,都必须能够通过引用传递MyClass&name,这似乎是一种痛苦

有没有一种方法可以在.cpp文件的顶部定义MyClass name,而不必在内存中创建该对象的全新实例并擦除所有进程,例如,如果您试图创建一个简单的计数器,并且主类会告诉计数类递增,visibility类将从counting类获取计数数并将其打印到屏幕上。这很简单,因为您可以将counting类传递给visibility,但是如果您有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”< /P> < P> C++,在爪哇中使用范围解析运算符<代码>::/>代码,而不是<代码> .<代码>。您可以这样调用静态方法:

extern int foo;
int foo = 42;
在标题中:

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();
}
#包括“myfile.h”
#包括
使用名称空间std;
int MyClass::myprivatesticvar=123;
void MyClass::myStaticMethod(){
瑟尔

在Java中,您可以访问任意多个其他类中的类,并且只要变量是静态的,您正在访问的类中的值将始终相同

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

extern int foo;
int foo = 42;
您需要一个定义,如下所示:

extern int foo;
int foo = 42;

如果将声明放在一个头文件中,并且该头文件包含在需要的任何位置,那么该声明将很好地工作,并且定义应该放在一个源文件中。

怎么说?我认为您应该使用头文件。默认情况下,所有方法都是“静态的”在C++中,除非它们包含在对象中。每个类不代表一个对象,但可以包含多个对象或零对象。我的类已经使用头文件和.cpp,但是我试图避免不断地绕过对象。您应该真正说明您要解决的问题是什么,而不是L问题。语言。很难确定您所担心的是什么,您是否需要一个全局变量?一个类的静态成员?您想要访问的是什么?还要注意,您提供的Java代码与描述没有任何关系……在Java中,您可以访问任意多个其他类中的类以及要访问的类中的值如果变量是静态的,G总是相同的。我在C++中寻找一种方法。所以,你不需要定义一个新的对象,如果你在所有的类中都有一个MyC类,使用MyCal::它能够使用更新的值吗?@ C++中的Brink静态方法和静态的限制一样。Java中的方法:它们只能访问静态变量,并且只能调用类的静态成员函数。除非对象的实例是静态可用的(例如在单例实现中),否则不能从静态方法访问类的实例方法或实例变量。当我使用您提供的示例时,我得到错误:无法在没有对象的情况下调用成员函数“Myclass::myMethod(int)”“,我将方法更改为static,但这也不起作用。我不想声明一个对象,但它有点起作用,只是说我正在使用的静态变量有一个未定义的引用。这是说我对MyClass:(variable)有一个未定义的引用。”,但我认为现在这是一个完全不同的问题。但这不是声明一个新的foo实例,它将返回到类中设置的默认变量吗?我想声明一个foo对象,但它是否能够使用从另一个类更改的变量。什么类?我的e中没有类如果你能看看我上面的Java示例代码,也许你能看到我想要得到的东西。