Действительно ли возможно иметь различные типы возврата для перегруженного метода?

В перегрузке метода действительно ли возможно иметь различные типы возврата для перегруженного метода? например,

void foo(int x) ;
int foo(int x,int y);
double foo(String str);

в общем объектно-ориентированном программировании действительно ли это возможно?

29
задан Dunith Dhanushka 11 May 2010 в 03:09
поделиться

4 ответа

Пока вы не делаете ничего подобного:

int foo (int i, int has_default=0);
double foo (long l);
/* Skipping to the function call.  */
foo (1);

все должно быть в порядке. Приведенный выше код вызовет проблемы, потому что он может пытаться вызвать любую функцию. Это может быть очень плохо, если вы используете C++ и возвращаете указатели вместо примитивов или ссылок...

1
ответ дан 28 November 2019 в 00:56
поделиться

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

  1. Типами параметров
  2. Количеством параметров
  3. Порядком параметров, объявленных в методе

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

Перегруженный метод может иметь или не иметь различные типы возврата. Но одного типа возврата недостаточно, чтобы компилятор определил, какой метод будет выполняться во время выполнения.

40
ответ дан 28 November 2019 в 00:56
поделиться

Посмотрите этот замечательный ответ, Перегрузка функций по возвращаемому типу?

Короче говоря, большинство статически типизированных языков не делают этого, но некоторые динамически типизированные языки могут.

Edit: Ответ "Вкратце" относится к перегрузке строго по возвращаемому типу. Как отмечали другие, если списки параметров отличаются и могут быть разрешены компилятором, то каждый метод может возвращать другой тип. В ADA возможно перегружать методы только по возвращаемому типу, поскольку возвращаемое значение нельзя игнорировать, и компилятор может разрешить вызов метода, используя эту информацию.

0
ответ дан 28 November 2019 в 00:56
поделиться

Для большинства языков программирования, поддерживающих перегрузку методов (Java, C#, C++, ...), если типы параметров разные, то и возвращаемые типы могут быть разными.

0
ответ дан 28 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: