HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Главная » Статьи » c++ |
Язык C++ позволяет использовать прототипы функций. По сути, возвращаемый тип, идентификатор функции и типы параметров с обязательной точкой с запятой в конце составляют прототип функции. Прототип функции (function prototype) — это объявление функции, но не ее определение. Благодаря явному объявлению возвращаемого типа и списка типов аргументов, в C++ при обращении к функции возможны строгая проверка типов и неявные преобразования типов. Итак, функция может быть объявлена до того, как она определена. Определение функции может идти позже в этом же файле, браться из библиотеки или из указанного пользователем файла. Прототип функции имеет следующую форму: тип имя(список_объявлений_аргументов); список_объявлений_ аргументов может быть пустым, содержать единственное объявление или несколько объявлений, разделенных запятыми. Если функция не имеет параметров, допускается использование ключевого слова void. В C++ функция с пустым списком параметров выглядит как имя_функции(). Такая информация позволяет компилятору отслеживать совместимость типов. Аргументы преобразуются к указанным в объявлении типам так же, как в случае присваивания. Рассмотрим пример прототипа функции min, которая принимает два целочисленных параметра, находит минимальное из них и возвращает его int min(int, int) ; И возвращаемый тип функции, и типы аргументов в списке указываются явно. Определение функции min () должно соответствовать этому объявлению. Прототип функции может также содержать имена аргументов. В случае min () это могло бы выглядеть так: int min(int x, int у); В C++ используется эллипсический символ (ellipsis) (...) для обозначения списка аргументов, который не указан, но подразумевается. Функция printf () из стандартной библиотеки stdio.h имеет следующий прототип: int printf(const char* cntrl_str, ...); Такая функция может быть вызвана с произвольным списком фактических параметров, но подобной практики лучше избегать, так как она не обеспечивает безопасность типов. Вот еще одна программа, иллюстрирующая применение прототипов функций: //Сложение трех целых — иллюстрация прототипов функций #include <iostream.h> int add3(int, int, int); double average(int); void main() { int score_l, score_2, score_3, sum; cout << "\nEnter three marks: "; cin >> score_l >> score_2 >> score_3; sum = add3(score_l, score_2, score_3); cout << "\nSum= " << sum; cout << "\n Average= " << average(sum); sum = add3(1.5 * score_l, score_2, 0.5 * score_3); cout << "\nWeight sum= " << sum << "."; cout << "\nWeight average= " << average(sum) << "." << "\n"; } int add3(int a, int b, int с) { return (a + b + с); } double average(int s) { return (s / 3.0); } Разбор программыint add3(int, int, int) ; double average(int); Эти объявления являются прототипами функций. Они информируют компилятор о типе и количестве аргументов, предполагаемых для каждой объявленной таким образом и определенной в другом месте функции. sum = add3(1.5 * score_l, score_2, 0.5 * score_3); Вызов функции суммирования трех целочисленных параметров add3, параметры в скобках будут неявно преобразованы к целому типу. int add3(int a, int b, int с) { return (а + b + с) ; } Это собственно определение функции. Оно соответствует объявлению прототипа функции перед main (). Так как список аргументов в прототипе функции может включать имена переменных, int add3(int а, int b, int с) ;тоже допустимо. | |
Просмотров: 3401 | Рейтинг: 5.0/1 |
Всего комментариев: 0 | |