Программирование >>  Дополнительные возможности наследования 

1 ... 29 30 31 [ 32 ] 33 34 35 ... 265


Эти переменные инициализируются в строке 9, а отображение их значений на экране выполняется в строке 11. Затем вызывается функция swapO, и эти переменные передаются ей в качестве аргументов.

Выполнение программы переносится в функцию swapO, где в строке 21 снова выводятся значения тех же, уже знакомых нам переменных. Как и ожидалось, их значения от передачи в функцию не изменились. В строках 23-25 переменные меняются своими значениями, что подтверждается очередной проверкой в строке 27. Но это положение сохраняется лишь до тех пор, пока программа не вышла из функции swap().

Затем управление программой передается строке 13, принадлежащей функции mainO, которая показывает, что переменные получили назад свои исходные значения и все изменения, произошедшие в функции, аннулированы!

Напомним, что в данном случае переменные передаются в функцию swapO как значения, т.е. в функции swapO были созданы копии этих значений, которые являются локальными по отношению к этой функции. Обмен значениями, выполненный в строках 23-25, был реализован на этих локальных переменных, но это никак не повлияло на переменные, оставшиеся в функции main().

На занятиях 8 и 10 вы узнаете альтернативные способы передачи параметров функциям, которые позволят изменять исходные переменные в функции main().

Подробнее о возвращаемых значениях

Функции возвращают либо реальное значение, либо значение типа void, которое служит сигналом для компилятора, что никакое значение возвращено не будет.

Чтобы обеспечить возврат значения из функции, напишите ключевое слово return, а за ним значение, которое должно быть возвращено. В качестве возврата можно задавать как константные значения, так и целые выражения, например:

return 5; return (х > 5): return (MyFunctionO):

Все приведенные выше выражения являются правомочными установками возврата функций, если исходить из того, что функция MyFunctionO сама возвращает некоторое значение. Второе выражение, return (х > 5), будет возвращать false, если х не больше 5, или true, если х больше 5. Таким образом, если в возврате задается логическое выражение, то возвращаются не значения переменной х, а логические значения false или true (ложь или истина).

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

Однако функция может содержать несколько операторов return. Эта идея иллюстрируется в листинге 5.6.



Листинг 6.6. Испоньзоваиив ивсходьких операторов return

2 3 4 5 6 7

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Листинг 5.6. Использование нескольких операторов return в теле функции

#include <iostream.h>

int Doubler(int AmountToDouble);

int mainO {

int result = 0; int input;

cout << Enter a number between 0 and 10,000 to double: : cin input;

cout << \ nBefore doubler is called... ;

cout << \ ninput: input << doubled: << result << \ n ;

result = Doubler(input);

cout << \ nSack from Doubler ,\ n ;

cout << \ ninput: << input << doubled: << result << \ n

return 0;

int Doubler(int original) {

if (original <= 10000)

return original * 2; else

return -1; cout << You cant get here!\ n ;

Enter a number between 0 and 10,000 to double: 9000

Before doubler is called.., input: 9000 doubled: 0

Back from doubler.

input: 9000 doubled: 18000

Enter a number between 0 and 10,000 to double: 11000

Before doubler is called , input: 11000 doubled: 0 Back from doubler.. . input: 11000 doubled: -1



of в строках 14 и 15 программа предлагает пользователю ввести число и со- >* а храняет его в переменной input. В строке 18 отображается только что введенное число вместе со значением локальной переменной result. В строке 20 вызывается функция DoublerO и введенное значение передается ей как параметр. Результат выполнения функции присваивается локальной переменной result, и в строке 23 снова выводятся значения тех же переменных.

В строке 31, относящейся к функции DoublerO, значение переданного параметра сравнивается с числом 10 ООО. Если окажется, что оно не превыщает 10 ООО, функция возвращает удвоенное значение исходного числа. Если оно больше 10 ООО, функция возвращает число -1 в качестве сообщения об ошибке.

Выражение в строке 35 никогда не будет достигнуто, потому что при любом значении переданного параметра (большем 10 ООО или нет) возврат из функции будет осуществлен либо в строке 32, либо в строке 34, но в любом случае до строки 35. Хороший компилятор сгенерирует предупреждение, что это выражение не может быть выполнено, и хороший программист должен принять соответствующие меры!

Вопросы о ответы

в чем состоит разница между объявлениями int main() и void maln() и какое из них лучше использовать? Ведь оба варианта работают одинаково хорошо, поэтому стоитли применять первый вариант int main (){ return 0;}7 1

Оба объявления будут работать с большинством компиляторов, но только аариант int mainO является ANSI-совмвстимым, следовательно, только объявление int main() гарантирует работу программы.

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

И хотя вы вряд ли будете использовать возвращаемое значение, стандарт ANSI требует его присутствия.

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

long myFunction(int);

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

Из этого правила существует одно исключение, которое вступает в силу, если в прототипе функции для параметра объявляется стандартное значение. Это значение, которое используется в том случае, если при вызове функции для этого параметра не установлено никакого значения. Несколько изменим предьщущее объявление:

long myPunction (int х = 50);

09885149



1 ... 29 30 31 [ 32 ] 33 34 35 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика