Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Функция в программировании — это поименованная часть программы, которая может вызываться из других частей программы нужное количество раз. Логически программа на С++ представляет собой набор функций, одна из которых, главная, имеет имя main() (в простейшем случае функция main() является единственной). Программа начинает работу с функции main(), являющейся точкой входа в программу и получающей управление первой после запуска программы на выполнение.
Обычно программа на С++состоит из большого числа небольших функций. Рассмотрим примеры программ, демонстрирующих вывод в стиле С и в стиле С++:
/* proba_1_1.cpp вывод в стиле С */ #include[4] <stdio.h> //для ввода/вывода #include <conio.h> //для _getch() int main() { printf ("Ivanov Ivan\n"); printf ("Ok\n"); _getch();// функция _getch() приостанавливает выполнение программы до «нажатия любой // клавиши», это позволит увидеть результат вывода return 0[5]; } |
//proba_1_2.cpp вывод в стиле С++ */ #include <iostream> //для ввода/вывода #include <conio.h> //для _getch() int main() { std[6]::cout << "Ivanov Ivan\n"; std::cout << "Ok"<< std::endl[7]; _getch(); return 0; } |
//proba_1_3.cpp вывод в стиле С++ с использованием пространства имен std*/ #include <iostream> #include <conio.h> using namespace std[8]; int main() { cout << "Ivanov Ivan\n"; cout << "Ok"<< endl; _getch(); return 0; } |
Результат выполнения любой из программ в режиме консольных приложений:
Ivanov Ivan
Ok
Пояснения к примерам:
Для удобства работы целесообразно в начало каждого текстового файла программы помещать строку комментария с именем файла. В третьей и четвертой строках программ – директивы препроцессора, обеспечивающие включение в программу средств связи со стандартными потоками ввода/вывода данных и прототипа функции _getch (). В строке, содержащей заголовок функции main(),служебное словоint указывает, что функция возвращает целое значение. Круглые скобки после main()соответствуют синтаксису заголовка любой функции. В них помещается, при необходимости, список параметров.
В фигурных скобках представлено тело функции (последовательность описаний, определений и операторов, каждое из которых заканчивается символом «точка с запятой»). В наших примерах тело функции содержит только операторы вывода текста. С++ обеспечивает выполнение вывода в стандартный поток std::cout с использованием оператора <<, а ввода из стандартного потока std::cin – с использованием оператора >>. В то же время, доступны, как и в С, функции вывода printf() и ввода scanf().
Одна из принципиальных особенностей С++ – расширение действия стандартных операций, или перегрузка. Конструкция (лексема) <<,при условии, что слева от нее находится имя объекта std::cout (std::cout <<) означает операцию « поместить в поток », в противном случае,означает, как и в языке С, операцию сдвига влево двоичного представления значения левого операнда (например, запись x << 2 означает сдвиг значения переменной x на 2 разряда влево, т.е. умножение на 4).
Оператор return – оператор возврата, завершающий выполнение программы и передающий в точку ее вызова значение выражения (return выражение;). Для функции main() это значение должно быть равно нулю (return0;), если исполнение программы прошло успешно. Так как программа «запускается» на исполнение по команде операционной системы, то и возврат будет выполнен к операционной системе (точнее, в стандартный модуль, который автоматически «прикомпоновывается» к программе и из которого осуществляется ее вызов).
Заголовок функции – имя (идентификатор) функции, за которым в круглых скобках может следовать список описаний формальных параметров и перед которым указывается тип функции (тип возвращаемого функцией значения).
Формат заголовка функции:
void имя_функции () // нет ни параметров, ни возвращаемого значения
void имя_функции (void) // нет ни параметров, ни возвращаемого значения
void имя_функции (список_параметров) // есть параметры и нет возвращаемого значения
тип_функции имя_функции (список_параметров)
// есть параметры и есть возвращаемое значение
тип_функции имя_функции () // нет параметров и есть возвращаемое значение
Прототип функции – это заголовок функции, заканчивающийся символом «;»:
char* strcpy( char*, const char* );
Объявление функции –указание ее прототипа.
Сигнатура функции – часть заголовка функции, позволяющая средствам трансляции идентифицировать функцию среди других. В С++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её параметров, что составляет сигнатуру функции в этом языке: заголовок функции, за вычетом типа_функции:
имя_функции (список_параметров)
Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса:
Complex::add (Complex& x, Complex& y)
//функция add принадлежит классу Complex
Тело функции – группа операторов, реализующая алгоритм решения некоторой части задачи. Тело функции должно быть заключено в фигурные скобки:
{ описание данных
операторы;
return [ выражение ]; // [ выражение ] может отсутствовать
}
Тип функции – это тип возвращаемого функцией значения. Оператор return выражение; возвращает значение выражения в точку вызова функции. Оператор return; записываемый без выражения означает, что функция не имеет возвращаемого значения и имеет тип void. При этом управление из функции возвращается либо при выполнении этого оператора, либо при достижении правой фигурной скобки, завершающей функцию (при отсутствии ключевого слова return).
return; //функция не возвращает значения и имеет тип void;
return 3; //возвращаемое функцией значение = 3;
return (a + b); //возвращаемое значение = значению выражения (а + b);
//скобки необязательны, используются для улучшения читаемости кода
Тело функции main() – это блокпрограммы. Любой фрагмент текста программы в фигурных скобках называют составным оператором (блоком операторов) или просто блоком. В общем случае, тело любой функции может содержать сколько угодно блоков.
Определение функции –это совокупность ее заголовка и тела.
Вызов функции – указание имени функции и в круглых скобках списка фактических параметров (аргументов), которые необходимо ей передать (если они есть):
_getch(); //вызов функции ожидания нажатия клавиши на клавиатуре strcpy(s, " aaaaa " ); //вызов функции копирования строки " aaaaa " в строку s int i = f1(5); //переменной i присваивается значение результата вызова функции f1 f2(x); double x = sin(1.2) + cos(0.7); //переменной x присваивается значение суммы результатов вызоваОператор вызова функции состоит из ее имени, за которым в круглых скобках располагается список фактических параметров (если они есть) или только из идентификатора функции, если параметров нет. Выполнение оператора вызова функции приводит к активизации действий, описанных в ее теле: если в программе встречается имя функции, то происходит ее вызов (обращение к ней), т.е. функции передается управление. После завершения работы функции управление возвращается в точку ее вызова. Функция, которая вызывает какую-либо другую функцию, называется вызывающей функцией, а функция, которую вызывают на выполнение, называется вызываемой функцией.
Указанные в операторе фактические параметры (аргументы) должны соответствовать описанным в заголовке функции формальным параметрам по типу, количеству и порядку следования. Перед активизацией тела функции происходит передача в нее значений фактических параметров, соответствующих формальным параметрам (с учетом способа передачи):
double CUB_X (double x)
{
return (x*x*x);
void main ()
{
double a = 10.0, y;
y = CUB_X(a);return;
}
Вызвать функцию можно после ее объявления или определения. Объявление функции из стандартной библиотеки выполняется подключением соответствующего файла директивой препроцессора #include.
Если функция возвращает значение некоторого типа, то необходимо принять (сохранить) это значение в переменную того же типа, либо вывести его на экран, либо использовать в составном выражении. Например, функция sqrt() (#include <math.h>), извлекающая квадратный корень, принимает как аргумент значение, из которого корень следует извлечь, и возвращает значение этого корня:
double x=2.0; double dbl = sqrt( x ); cout << dbl << " " << sqrt( 5.0 );С++ не позволяет определять функции внутри других функций. Связь между функциями осуществляется с помощью передаваемых функции фактических параметров (аргументов) и возвращаемых значений или через глобальные (внешние) переменные. Определение «внешние» используется главным образом для того, чтобы подчеркнуть отличие от «внутренних» информационных объектов – аргументов и переменных, определяемых внутри функции.
Дата публикования: 2014-11-29; Прочитано: 801 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!