перевести код C ++ в Java - PullRequest
       13

перевести код C ++ в Java

0 голосов
/ 31 октября 2011

Мне нужно перевести некоторые c ++ в java, но у меня есть несколько проблем.

Как мне обращаться с указателями, когда они объявлены в качестве аргументов в Методе?

static void test( double *output){}

Также, что и как я могу заменить struct?

struct test { int t;
int arg;
float *pva;
double *array;
}

А потом в коде они используют:

double test(struct test *test)
{}

Да, и последний ... это тоже внутри struct test, что означает:

test->arg

Ответы [ 4 ]

1 голос
/ 31 октября 2011

У вас нет указателей в Java, только ссылки и только для объектов (не для примитивных типов).Ссылки похожи на указатели, но вы используете «.»обозначение вместо «*» или «->».Кроме того, вам не нужно удалять объекты в Java, вы просто прекращаете их использовать и, в конце концов, сборщик мусора уничтожает их.

Отвечая на ваши вопросы выше, снизу вверх: если test - указатель на структуруили класс в C ++, а arg является переменной-членом test, тогда

test->arg

используется для доступа к члену через указатель.Это будет отображаться в

test.arg

в Java, если arg является публичной переменной-членом тестового объекта.

Я бы перевел следующее:

struct test
{
    int t;
    int arg;
    float *pva;
    double *array;
}

...

double test(struct test *test)
{}

в

public class Test
{
    public int t;

    public int arg;

    float [] pva;

    double [] array;
}

...

public static double test(Test test)
{}

Для первого случая, т. Е. Функции

static void test( double *output){}

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

static double test(double output)
{}

Надеюсь, это поможет.

1 голос
/ 31 октября 2011
static void test( double *output){}

Это требует большего контекста, это может означать указатель на double или массив double.

struct test { int t;
int arg;
float *pva;
double *array;
}

A struct - это class со стандартным уровнем доступа public.Вы можете заменить его классом с public членами.

test->arg

Доступ к элементу arg в test.

0 голосов
/ 31 октября 2011

(1) static void test( double *output){}

Здесь double* можно заменить на Double[] (предположим, что вы делаете new Double[]), а метод можно поместить внутрьa class.

class testMethod {
  public static void test (Double []output) { }
}

(2) как заменить struct?Его можно заменить на class.

class test {
public int t;
public int arg;
public Float []pva;
public Double []array;
}

(3) double test(struct test *test) {} Это может быть

double test (test t) {}

(4) test->arg

Java не имеет указателей (хотя это реализовано со ссылкой);поэтому приведенное выше утверждение будет test.arg

0 голосов
/ 31 октября 2011

В простых случаях вы можете заменить float * и double * на float [] и double []. Однако C ++ позволяет вам делать всевозможные неприятные вещи, которые трудно перевести на Java, потому что это не разрешено в Java.

Вы можете заменить struct на class

Если вы хотите понять базовый синтаксис C ++, я предлагаю вам прочитать руководство о том, как программировать на C ++.

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