naveensiva Ответов: 5

как перегрузить функции


привет друзья
можете ли вы найти следующее

class Code
{
  int sum(int a);
  char sum(int a);
}
int Code::sum(int a)
{
  cout<<" returns integer";
}
char Code::sum(int a)
{
 cout<<" returns char";
}
int main()
{
 Code c;
 c.sum(65);
 }


Я не пишу весь код, можете ли вы угадать вывод для этого и сказать мне, какая функция будет вызываться первой и как это будет с выводом.
кто-нибудь может мне помочь, пожалуйста

shakil0304003

очень глупая ошибка перегрузки функции...

5 Ответов

Рейтинг:
40

Prerak Patel

Ошибка
Обратите внимание, что функция не могу быть перегруженным только его возвращаемым типом. По крайней мере, один из его параметров должен иметь другой тип.

Перегруженные функции в http://www.cplusplus.com/doc/tutorial/functions2/[^]


Рейтинг:
2

ganeshkawade2003

Привет,

Код не будет компилироваться..
U получит c2556 с надписью "перегруженный func имеет разные типы возвращаемых значений, но один и тот же список параметров".

Ваша функция должна иметь" отличный " формальный список параметров в полиморфизме времени компиляции(перегрузка функции).


Olivier Levrey

Этот ответ не заслуживает 1. Кроме того, он правильный. Есть 5 ганешкаваде.

Рейтинг:
1

Niklas L

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

template <typename T> T get(int i)
{
	return T(i);
}

int main()
{
	int i = get<int>(65);
	char c = get<char>(65);

	return 0;
}

Приведенный выше код может быть ошибочно принят за перегрузку, когда на самом деле это не так. Вам нужно будет указать тип возвращаемого значения при вызове функции в качестве аргумента шаблона. Иногда это может быть полезно, но на самом деле это не отличается от реализации одного метода для каждого типа возвращаемого значения, например int getInt(int i) и char getChar(int i).


Рейтинг:
1

Stefan_Lang

Кроме того, ваши функции sum () объявлены закрытыми и не могут быть вызваны в main - вы получите ошибку компилятора, если не объявите их общедоступными.

Что касается вашего вопроса, если вы идете определить void sum(int) и void sum(char), тогда ваш звонок sum(65) я бы назвал вариант int: целочисленные константы всегда предполагаются типа int, если только они не слишком велики, чтобы поместиться в int.


Рейтинг:
0

W∴ Balboos, GHB

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

struct Rvals {
  int  i;
  char c;
} typedef rvals;


а затем используйте член i или c, как вы хотите, или оба, из одного вызова.


Richard Deeming

Апрель 2011!

W∴ Balboos, GHB

Как я оказался на этой странице? Странно!

Подождите-в данный момент он помечен как обновленный 55 минут назад. Он появился в реплике как " новый"

Richard Deeming

Это "особенность" - дата "обновления" обновляется всякий раз, когда публикуется новое решение. Если вы посмотрите на историю изменений [^], последний раз он был обновлен в 2011 году.

Я заметил, что решение 5 отсутствует, поэтому я предполагаю, что это был спам-ответ, который был удален. Всякий раз, когда это происходит, вопрос по-прежнему выдвигается на первое место в списке.