Статические методы C ++ (в разных классах) (как в Java) - PullRequest
2 голосов
/ 07 марта 2012

Как мне сделать статические методы, которые используются как статические методы в Java, когда у меня есть несколько файлов .cpp?

В Java вы можете ссылаться на другой класс, используя MyClass name = new MyClass (); и каждая переменная в этом классе будет одинаковой при вызове из любого другого файла, который у вас есть.

Кажется, мне больно иметь возможность передавать по ссылке MyClass & name в каждую функцию, в которой вы хотите использовать этот класс.

Есть ли способ определить имя MyClass в верхней части файла .cpp без создания нового экземпляра этого объекта в памяти и уничтожения всего вашего прогресса, например, если вы пытались сделать простой счетчик , а основной класс сообщит классу счетчика увеличиваться, а класс видимости получит количество отсчетов из класса подсчета и выведет его на экран. Теперь это будет просто: вы можете передать класс подсчета в видимость, но что если у вас более 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 ]

2 голосов
/ 07 марта 2012

В 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.

0 голосов
/ 07 марта 2012

В Java вы можете получить доступ к классу в любом количестве других классов, а значения в классе, к которому вы обращаетесь, всегда будут одинаковыми, пока переменные являются статическими.

Вы имеете в виду, как глобальная переменная?Вы можете объявить глобальную переменную, подобную этой:

extern int foo;

Вам понадобится одно определение этого, которое выглядит так:

int foo = 42;

Объявление 1016 * будет работать хорошо, если поместить его в файл заголовка, который включен везде, где это необходимо, а определение должно находиться в одном исходном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...