Освой самостоятельно С++ за 21 день.
Шрифт:
17: cout << b;
18: cout << "equals c: ";
19: cout << c << endl;}
20: else
21: cout << "a-b does not equal c: " << endl;
22: return 0;
23: }
3. Введите программу из упражнения 2; скомпилируйте, скомпонуйте и запустите ее на выполнение. Введите числа 20, 10 и 50. Вы получили результат, который и ожидали? Почему нет?
4. Проанализируйте эту программу и спрогнозируйте результат:
1: #include <iostream.h>
2: int main
3: {
4: int а = 1, Ь = 1, с;
5: if (с = (a-b))
6: cout << "The value of с is: " << с;
7: return 0;
8: }
5. Введите,
День 5-й. Функции
Несмотря на то что при объектно-ориентированном программировании внимание акцентируется не на функциях, а на объектах, функции тем не менее остаются центральным компонентом любой программы. Итак, сегодня вы узнаете:
• Что такое функция и из чего она состоит
• Как объявлять и определять функции
• Как передавать параметры функциям
• Как возвращать значение функции
Что такое функция
Функция по своей сути — это подпрограмма, которая может манипулировать данными и возвращать некоторое значение. Каждая программа C++ имеет по крайней мере одну функцию main, которая при запуске программы вызывается автоматически. Функция main может вызывать другие функции, те, в свою очередь, могут вызывать следующие и т.д.
Каждая функция обладает собственным именем, и, когда оно встречается в программе, управление переходит к телу данной функции. Этот процесс называется вызовом функции (или обращением к функции). По возвращении из функции выполнение программы возобновляется со строки, следующей после вызова функции. Такая схема выполнения программы показана на рис. 5.1.
Хорошо разработанные функции должны выполнять конкретную и вполне понятую задачу. Сложные задачи следует "разбивать" на несколько более простых, достаточно легко реализуемых с помощью отдельных функций, которые затем могут вызываться по очереди.
Различают два вида функций: определяемые пользователем (нестандартные) и встроенные. Встроенные функции являются составной частью пакета компилятора и предоставляются фирмой-изготовителем. Нестандартные функции создаются самим программистом.
Рис. 5.1. Когда программа вызывает функцию, управление переходит к телу функции, а затем выполнение программы возобновляется со строки, следующей после вызова
Возвращаемые значения, параметры и аргументы
Функции могут возвращать значения. После обращения к функции она может выполнить некоторые действия, а затем в качестве результата своей работы послать назад некоторое значение. Оно называется возвращаемым значением, причем тип этого значения обязательно должен быть объявлен. Таким образом, запись
int myFunction;
объявляет, что функция myFunction возвращает целочисленное значение.
В функцию можно также и посылать некоторые значения. Описание посылаемых значений называется списком параметров.
int myFunction(int someValue, float someFloat);
Это объявление означает, что функция myFunction не только возвращает целое число, но и принимает два значения в качестве параметров: целочисленное
и вещественное.Параметр описывает тип значения, которое будет передано функции при ее вызове. Фактические значения, передаваемые в функцию, называются аргументами.
int theValueReturned = myFunction(5,6.7);
Здесь целая переменная theValueReturned инициализируется значением, возвращаемым функцией myFunction, и что в качестве аргументов этой функции передаются значения 5 и 6,7. Тип аргументов должен соответствовать объявленным типам параметров.
Объявление и определение функций
Использование функций в программе требует, чтобы функция сначала была объявлена, а затем определена. Посредством объявления функции компилятору сообщается ее имя, тип возвращаемого значения и параметры. Благодаря определению функции компилятор узнает, как функция работает. Ни одну функцию нельзя вызвать в программе, если она не была предварительно объявлена. Объявление функции называется прототипом.
Объявление функции
Существует три способа объявления функции.
• Запишите прототип функции в файл, а затем используйте выражение с #include, чтобы включить его в свою программу.
• Запишите прототип функции в файл, в котором эта функция используется.
• Определите функцию перед тем, как ее вызовет любая другая функция. В этом случае определение функции одновременно и объявляет ее.
Несмотря на то что функцию можно определить непосредственно перед использованием и таким образом избежать необходимости создания прототипа функции, такой стиль программирования не считается хорошим по трем причинам.
Во-первых, требование располагать функции в файле в определенном порядке затрудняет поддержку программы в процессе изменения условий ее использования.
Во-вторых, вполне возможна ситуация, когда функции A необходимо вызвать функцию B, но не исключено также, что при некоторых обстоятельствах и функции B потребуется вызвать функцию A. Однако невозможно определить функцию A до определения функции B и в то же время функцию B до определения функции A, т.е. по крайней мере одна из этих функций обязательно должна быть предварительно объявлена.
В-третьих, прототипы функций — это хорошее и сильное подспорье при отладке. Если согласно прототипу объявлено, что функция принимает определенный набор параметров или что она возвращает значение определенного типа, а затем в программе делается попытка использовать функцию, не соответствующую объявленному прототипу, то компилятор заметит эту ошибку еще на этапе компиляции программы, что позволит избежать неприятных сюрпризов в процессе ее выполнения.
Прототипы функций
Прототипы многих встроенных функций уже записаны в файлы заголовков, добавляемые в программу с помощью #include. Для функций, создаваемых пользователями, программист должен сам позаботиться о включении в программу соответствующих прототипов.
Рис. 5.2. Составные части прототипа функции.
Прототип функции представляет собой выражение, оканчивающееся точкой с запятой, и состоит из типа возвращаемого значения функции и сигнатуры. Под сигнатурой функции подразумевается ее имя и список формальных параметров.