Читаем Освой самостоятельно С++ за 21 день. полностью

Прототип функции сообщает компилятору тип возвращаемого значения, имя функции и список параметров. Наличие параметров не обязательно, но если они все-таки имеются, в прототипе должны быть объявлены их типы. Имена параметров перечислять необязательно. Строка прототипа всегда оканчивается точкой с запятой (;). Определение функции должно соответствовать своему прототипу по типу возвращаемого значения и списку параметров. Оно должно содержать имена всех параметров, а тело определения функции должно заключаться в фигурные скобки. Все выражения внутри тела функции должны оканчиваться точкой с запятой, кроме заголовка функции. Который оканчивается закрывающей круглой скобкой.

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

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

Примеры прототипов функций:

long FindArea(long length, long width); // возвращает значение типа long, имеет два параметра

void PrintMessage(int messageNumber); // возвращает значение типа void, имеет один параметр

int GetChoice; // возвращает значение типа int, не имеет параметров

BadFunction; // возвращает значение типа int, не имеет параметров

Примеры определений функций:

long FindArea(long l, iong w)

{

   return 1 * w;

}

void PrintMessage(int whichMsg)

{

  if (whichMsg == 0)

    cout << "Hello.\n";

  if (whichMsg == 1)

    cout << "Goodbye.\n";

  if (whlchMsg > 1)

    cout << "I'm confused.\n";

}

<p>Выполнение функций</p>

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

<p>Локальные переменные</p>

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

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

Листинг 5.2. Использование локальных переменных u параметров функции

1: #include

2:

3: float Convert(float);

4: int main

5: {

6:    float TempFer;

7:    float TempCel;

8:

9:    cout << "Please enter the temperature in Fahrenheit: ";

10:   cin >> TempFer;

11:   TempCel = Convert(TempFer);

12:   cout << "\nHere's the temperature in Celsius: ";

13:   cout << TempCel << endl;

14:   return 0;

15: }

16:

17: float Convert(float TempFer)

18: {

19:    float TempCel;

20:    TempCel = ((TempFer - 32) * 5) / 9;

21:    return TempCel;

22: }

Результат:

Please enter the temperature in Fahrenheit: 212

Here's the temperature in Celsius: 100

Please enter the temperature in Fahrenheit: 32

Here's the temperature in Celsius: 0

Please enter the temperature in Fahrenheit: 85

Here's the temperature in Celsius: 25.4444

Анализ: В строках 6 и 7 объявляются две переменные типа float: одна (TempFer) для хранения значения температуры в градусах по Фаренгейту, а другая (TempCel) — в градусах по Цельсию. В строке 9 пользователю предлагается ввести температуру по Фаренгейту, и это значение затем передается функции Convert.

После вызова функции Convert программа продолжает выполнение с первого выражения в теле этой функции, представленного строкой 19, где объявляется локальная переменная, также названная TempCel. Обратите внимание, что эта локальная переменная — не та же самая переменная TempCel, которая объявлена в строке 7. Эта переменная существует только внутри функции Convert. Значение, переданное в качестве параметра TempFer, также является лишь переданной из функции main локальной копией одноименной переменной.

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

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT