Что означает возвращать результат функции в качестве «выходного параметра»?

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

a) Напишите функцию C ++ с именем «product», которая вычисляет произведение двух целочисленных значений, переданных ей как. Функция принимает два входных аргумента и возвращает вычисленный ответ в качестве выходного параметра функции.
б) Напишите одну строку кода, которая может быть использована для вызова (вызова) этой функции.

Это второе: a) Напишите функцию C ++ с именем «product», которая вычисляет произведение двух целочисленных значений, переданных ей как. Функция принимает два входных аргумента и возвращает ответ продукта в результате выполнения функции.
б) Напишите одну строку кода, которая может быть использована для вызова (вызова) этой функции.

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

 int product(int a, int b)
{ return a*b; }

и часть б как
соиЬ << «Произведение ваших двух чисел» << продукт (а, б);

Во-первых, я прав и в любом случае, что будет означать ответ возврата в качестве выходного параметра.
И пока я нахожусь, и вы чувствуете, что мне жаль меня, не могли бы вы сказать мне, следует ли мне использовать void вместо int, и, наконец, кто-то может объяснить лучше, что именно вернуть по ссылке. Я понимаю, что весь аспект должен иметь & в конце параметра и «технически», что он позволяет мне изменить его, а не просто вернуть его, но я надеялся на что-то более глубокое? Извините, что так нуждаюсь, но любая помощь будет принята с благодарностью. Спасибо
Линду

Постскриптум Я бы пометил как домашнюю работу, но она устарела. Сожалею!

0

Решение

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

«Стандартное» возвращаемое значение (как вы сделали):

int product(int a, int b)
{ return a*b; }

Вызов стандартной функции:

int answer = product(10, 5);
cout << answer << endl;

«Выходной параметр»: вместо передачи answer в качестве фактического значения (например, 5 или 3), вы отправляете ящик, куда должен идти ответ; изменение содержимого этого поля изменит значение переменной в вашем main функция также (это обозначается int & answer вместо int answer).

void product_output_parameter(int a, int b, int & answer)
{ answer = a*b; }

Вызов функции:

int answer;
// send answer in as a place to put the answer
product_output_parameter(10, 5, answer);
// the value stored in answer has changed
cout << answer << endl;

Если функция была определена так:

void product_output_parameter(int a, int b, int answer)
{ answer = a*b; }

изменения в answer будет происходить только внутри функции, и поэтому не будет работать.

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

1

Другие решения

Функция, которую вы написали, вычисляет продукт и вызывает функцию продукта. Вы также можете вызвать это так.

int productOfAandB = product (a, b);

Ссылка позволяет изменять переменную внутри области действия вызывающего и вызываемого абонентов. Классическим примером может быть отправка Боба в раздевалку для замены на PE, в этой процедуре Боб просто идет в раздевалку и меняет, а затем процедура, которая велела Бобу сделать это, продолжается с измененным Бобом. Если бы Боба нужно было скопировать в раздевалку, а затем вернуть из раздевалки, заменив первоначального Боба, он бы вел себя больше как функция возвращаемого значения.

  1. Передача по значению, Возврат по значению
    BOB = changForPE (BOB); // это эффективно заменяет BOB совершенно новым BOB
  2. Передать по ссылке
    changeForPE (&BOB); // эта функция может что-то делать с переменной, хранящейся в BOB
    // но, похоже, она не перезаписывает переменную BOB
0

По вопросам рекламы [email protected]