×
Traktatov.net » Освой самостоятельно С++ за 21 день » Читать онлайн
Страница 52 из 448 Настройки

Прототипы функций

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

Рис. 5.2. Составные части прототипа функции.


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

Список формальных параметров представляет собой список всех параметров и их типов, разделенных запятыми. Составные части прототипа функции показаны на рис. 5.2.

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


long Area(int, int);


Этот прототип объявляет функцию с именем Area(), которая возвращает значение типа long и принимает два целочисленных параметра. И хотя такая запись прототипа вполне допустима, это не самый лучший вариант. Добавление имен параметров делает ваш прототип более ясным. Та же самая функция, но уже с именованными параметрами, выглядит гораздо понятнее:


long Area(int length, int width);


Теперь сразу ясно, для чего предназначена функция и ее параметры. Обратите внимание на то, что для каждой функции всегда известен тип возвращаемого значения. Если он явно не объявлен, то по умолчанию принимается тип int. Однако ваши программы будут понятнее, если для каждой функции, включая main(), будет явно объявлен тип возвращаемого значения. В листинге 5.1 приводится программа, которая содержит прототип функции Area().

Листинг 5.1. Объявление, определение и использование функции

1: // Листинг 5.1. Использование прототипов функций

2:

3: #include

4: int Area(int length, int width); //прототип функции

5:

6: int main()

7: {

8:    int lengthOfYard;

9:    int widthOfYard;

10:   int areaOfYard;

11:

12:   cout << "\nHow wide is your yard? ";

13:   cin >> widthOfYard;

14:   cout << "\nHow long is your yard? ";

15:   cin >> lengthOfYard;

16:

17:   areaOfYard= Area(lengthOfYard,widthOfYard);

18:

19:   cout << "\nYour yard is ";

20:   cout << areaOfYard;

21:   cout << " square feet\n\n";

22:   return 0;

23: }

24:

25: int Area(int yardLength', int yardWidth)

26: {

27:    return yardLength * yardWidth;

28: }


Результат:

How wide is your yard? 100

How long is your yard? 200

Your yard is 20000 square feet


Анализ: Прототип функции Area() объявляется в строке4. Сравните прототип с определением функции, представленным в строке 25. Обратите внима­ние, что их имена, типы возвращаемых значений и типы параметров полностью сов­падают. Если бы они были различны, то компилятор показал бы сообщение об ошиб­ке. Единственное обязательное различие между ними состоит в том, что прототип функции оканчивается точкой с запятой и не имеет тела.