|
Программирование >> Дополнительные возможности наследования
функции Синтаксис прототипа функции: тт возврата тя функции {[тип 1имя параметра}..г выражения: : \ , Прототип функции сообщает компилятору тип возвращаемого значения, имя функции и список параметров. Наличие параметров не обязательно, но если они все-таки имеются, в прототипе должны быть объявлены их типы. Имена параметров перечислять не обязательно. Строка прототипа всегда оканчивается точкой с запятой (;). Определение функции должно соответствовать своему прототипу по типу возвращаемого значения и списку параметров. Оно должно содержать имена всех параметров, а тело определения функции должно заключаться в фигурные скобки. Все выражения внутри тела функции должны оканчиваться точкой с запятой, кроме заголовка функции, который оканчивается закрывающей круглой скобкой. Если функция возвращает значение, она должна содержать выражение с оператором return: Это выражение может находиться в любой части определения функции, но обычно оканчивает его. Для каждой функции задается тип возвращаемого значения. Если он явно не определен, по умолчанию устанавливается тип возврата int. Старайтесь всегда указывать тип возвращаемого значения в явном виде. Если функция не возвращает никакого значения, то в качестве типа возвращаемого значения используйте void. Примеры прототипов функций: iong ,FindArea(long length, long width); возвращает значение типа long, имеет два: параметра \ ySldiPrintMessageCint messageNumber); возвращает значение типа void, имеет один параметр inl;GetChoiceC)rb возвращает значение типа int, не имеет параметров BadFunctionO; возвращает значение типа int, не имеет параметров Примеры определений функций: long FindArea(long 1, long w) return 1 * w; void PrintMessage(int whichMsg) { = if (WhichMsg ==. 0) cout Hello,\n ; :;f;if(whichMsg == 1) у t:y\f :,4C0Ut;<< Goodbye.\n ;::;,.; ::4=it.(whichMsg > I) ; У ; ,:j>::*- OUt-<< Гт Выполнение функции При вызове функции ее выполнение начинается с выражения, которое стоит первым после открывающей фигурной скобки ({). В теле функции можно реализовать ветвление, используя условный оператор if (и некоторые другие операторы, которые рассматриваются на занятии 7). Функции могут также вызывать другие функции и даже самих себя (о рекурсии речь пойдет ниже в этой главе). Локальные переменные В функции можно не только передавать значения переменных, но и объявлять переменные внутри тела функции. Это реализуется с помощью локальных переменных, которые называются так потому, что существуют только внутри самой функции. Когда выполнение профаммы возвращается из функции к основному коду, локальные переменные удаляются из памяти. Локальные переменные определяются подобно любым другим переменным. Параметры, переданные функции, тоже считаются локальными переменными, и их можно использовать как определенные внутри тела функции. В листинге 5.2 представлен пример использования параметров функции и переменных, локально определенных внутри функции. Листинг 6.2. Ислопьзовалие покадьиык иеремеллых и лараметров функции 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream.h> float Convert(float); int main() float TempFer; float TempCel; cout Please enter the temperature in Fahrenheit: cin >> TempFer; TempCel = Convert(TempFer); cout << \ nHeres the temperature in Celsius: ; cout TempCel << endl; return 0; float Convert(float TempFer) { float TempCel; TempCel = ((TempFer - 32) * 5) / 9; return TempCel; Please enter the temperature ]n Fahrenheit; 212 Heres the temperature in Celsius; 100 Please enter the temperature in Fahrenheit; 32 Heres the temperature in Celsius; 0 Please enter the temperature in Fahrenheit; 85 Heres the temperature in Celsius; 29.4444 В строках 6 и 7 объявляются две переменные типа float: одна (TcmpFer) для хранения значения температуры в градусах по Фаренгейту, а другая (TempCel) - в градусах по Цельсию. В строке 9 пользователю предлагается ввести температуру по Фаренгейту, и это значение затем передается функции Convert(). После вызова функции ConvertO программа продолжает выполнение с первого выражения в теле этой функции, представленного строкой 19, где объявляется локальная переменная, также названная TempCel. Обратите внимание, что эта локальная переменная - не та же самая переменная TempCel, которая объявлена в строке 7. Эта переменная существует только внутри функции Convert(). Значение, переданное в качестве параметра TempFer, также является лишь переданной из функции main() локальной копией одноименной переменной. В функции ConvertO можно было бы задать параметр FerTemp и локальную переменную CelTemp, что не повлияло бы на работу профаммы. Чтобы убедиться в этом, можете ввести новые имена и перекомпилировать программу. Локальной переменной TempCel присваивается значение, которое получается в результате выполнения следующих действий; вычитания числа 32 из параметра TempFer, умножения этой разности на число 5 с последующим делением на число 9. Результат вычислений затем возвращается в качестве значения возврата функции, и в строке 11 оно присваивается переменной TempCel функции main(). В строке 13 это значение выводится на экран. В нашем примере программа запускалась трижды. В первый раз вводится значение 212, чтобы убедиться в том, что точка кипения воды по Фаренгейту (212) сгенерирует правильный ответ в градусах Цельсия (100). При втором испытании вводится значение точки замерзания воды. В третий раз - случайное число, выбранное для получения дробного результата. В качестве примера попробуйте запустить программу снова с другими именами переменных, как показано ниже. Должен получиться тот же результат. Каждая переменная характеризуется своей областью видимости, определяющей время жизни и доступность переменной в программе. Переменные, объявленные внутри некоторого блока программы, имеют область видимости, ограниченную этим блоком. К ним можно получить доступ только в пределах этого блока, и после того, как выполнение программы выйдет за пределы, все его локальные переменные автоматически удаляются из памяти. Глобальные же переменные имеют глобальную область видимости и доступны из любой точки программы. Обычно область видимости переменных очевидна по месту их объявления, но некоторые исключения все же существуют. Подробнее об этом вы узнаете при рассмотрении циклов в занятии 7.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |