
- •Определение объекта типа функции.
- •Void main ( void )
- •Void main (void) // 13
- •Проблема обмена информацией (данными) между функциями.
- •Передача информации в функцию через параметры по значению. Возврат значения одного результата из функции через возвращаемое значение.
- •Void main ( void )
- •Прототип (описание) функции. Понятие глобального объекта.
- •Void main ( void )
- •Void main ( void )
- •Void main ( void )
- •Передача параметров по ссылке.
- •Int& float& char&
- •Void countX (float a, float b, float c, float& X )
- •Void main ( void )
- •Void countX (float a, float b, float c, float& X )
- •Void main ( void )
- •Обмен данными между функциями через глобальные объекты. Функции без возвращаемого значения. Функции без параметров.
- •Void countX (void)
- •Void main ( void )
- •Смешанный обмен данными между функциями
- •Void main ( void )
- •Void countX (float c, float& X)
- •Void main ( void )
- •Программы, состоящие из двух и более файлов.
- •Void countX (float c, float& X); // описанa функция countX для расширения ее // области видимости. Ее определение
- •Void main ( void )
- •Void countX (float c, float& X)
Void main (void) // 13
{ // 14
int nA; // 15
float fltB; // 16
cout <<"Input numbers:\t" // 17
<<"\nfirst int\t"; // 18
cin>>nA; // 19
cout<<"second float\t"; // 20
cin>>fltB; // 21
float fltSumma; // 22
fltSumma = nA + fltB; // 23
cout<<"summa = " << fltSumma; // 24
cout<<endl<<"\tBYE !"; // ПОКА 25
getch(); // 26
} // 27
Рассмотрим приведенный текст.
Программа содержит функцию main.
Она состоит:
из заголовка ( строка 13 );
тела ( строки 14 – 27 ).
Тело функции состоит из инструкций. Каждая инструкция заканчивается точкой с запятой. Инструкций в теле функции всего 11, из них 3 – это инструкции определения объектов nA ( строка 15), fltB ( строка 16), fltSumma ( строка 22). Эти инструкции создают объекты, выделяя под них память. Напоминаем, что любой объект, имя которого встречается в программе, должен быть определен и определен всего один раз. Инструкции определения объектов легко распознать, они всегда начинаются с имен типов – здесь имена типов int и float (строки 15, 16, 22). Кроме этого в функции определены константные объекты-строки. Константные объекты-строки - это последовательности символов, взятые в двойные кавычки.
Вот эти пять объектов:
"Input numbers:\t"
"\nfirst int\t"
"second float\t"
"summa = "
"\tBYE !"
Обратите внимание, что почти в каждой из этих строк присутствуют escape-символы (здесь, для того чтобы их разглядеть, они выделены жирным курсивом).
Стандартные потоковые объекты С++ (cin, cout) и потоковые операторы >>, <<.
Кроме объектов na, fltb, fltSumma и константных строк в тексте появились имена cout и cin. Объекты cout и cin – это имена стандартных абстрактных объектов, тип их называется «поток», с их помощью организуется ввод и вывод в С++. Объект cout совместно с оператором >> организует вывод информации из памяти на экран. Объект cin совместно с оператором << организует ввод информации с клавиатуры в память.
сout и cin - это имена объектов, но если мы пытаемся воспользоваться этими объектами, где их определения, где и когда они создаются?
Описание объектов в хэдерных файлах .h. Область видимости имен – оператор using namespace std;
Определение стандартных объектов cout и cin присоединяется в строке 9. В этой строке записана директива #include специальной программы – препроцессора.
Директива #include вставляет перед текстом функции main текст файла iostream. Обратите внимание, что эта директива не является элементом языка С++, это элемент другого языка, языка программы препроцессор. Директива, не является инструкцией языка С++, а потому не имеет заканчивающей её точки с запятой. В тексте файла iostream находятся определения объектов cout и cin, эти определения и присоединяются к тексту программы.
Имя файла iostream записано в треугольных скобках < >, что является указанием системе, где, в каких папках искать файл и соответствующую ему библиотеку. Этот поиск делается автоматически.
Объект endl определен также в файле iostream, он работает так, как и escape-символ ‘\n‘ - переводит курсор при выводе на новую строку экрана.
Обратите внимание на инструкцию using namespace языка С++ в строке 19:
using namespace std;
Эта инструкция определяет область имен, где необходимо искать определения используемых в программе имен объектов. Дело в том, что сейчас существует очень много различных библиотек, в которых могут появиться одинаковые имена. Инструкция using namespace определяет, что поиск нужно осуществлять в области имен стандартной библиотеки std.
Последнее имя, которое используется в этой программе – имя getch. Это имя объекта типа функция. Как система и мы узнаем, что это имя функции, а не какого-то объекта любого другого типа? Этим признаком является то, что сразу после этого имени появляется оператор вызова функции – круглые скобки () (смотрите таблицу сводки операторов С++, приоритет 2). Этот объект, как и любой объект должен быть определен в функции, если им нужно воспользоваться. Описания стандартных функций находятся в .h файлах. Описание этой функции getch находится в файле conio.h , который подключается директивой препроцессора #include в строке 10. А определения этого стандартного объекта-функции (его код) находится в стандартной библиотеке (LIB). Само определение этого объекта- функции будет найдено автоматически в стандартной библиотеке и подключено к нашему коду на этапе редактирования.
Файлы, в которых находятся описания или определения стандартных объектов, могут иметь или не иметь расширение .h и называются хэдерные файлы (заголовочные файлы).
В функции main 7 инструкций-выражений.
Что делают инструкции-выражения? Инструкции-выражения делают то, что делают операторы, которые в них используются.
Инструкции-выражения
cout << "Input numbers:\t" << "\nfirst int\t";
cout << "second float\t";
cout << "summa = " << fltSumma;
cout << "\n\tBYE !";
используя оператор <<, совместно с потоковым объектом cout выводят на экран информацию из области памяти строковых констант и объекта fltSumma. Обратите внимание, что оператор << может использоваться каскадом (оператор << используется несколько раз с одним объектом cout).
Инструкции-выражения
cin>>nA;
cin>>fltB;
используя оператор >> совместно с потоковым объектом cin копируют информацию, введенную пользователем с клавиатуры, в область объектов nA и fltB.
Заметим, что оператор >> тоже может использоваться каскадом (оператор >> используется несколько раз с одним объектом cin).
Например две инструкции могли быть записаны как одна:
Cin >> nA >>fltB;
Инструкция-выражение
fltSumma = nA + fltB;
с помощью оператора + вычисляет сумму значений объектов nA и fltB и результат этого суммирования с помощью оператора = (присвоить) копирует в объект fltSumma.
Инструкция-выражение
getch();
с помощью оператора () (оператор вызова функции) вызывает функцию с именем getch, и ничего больше эта инструкция – выражение не делает!!!!!!
Еще раз напоминаем, что инструкция выражение делает только то, что делают над объектами операторы, записанные в выражении.
Другой вопрос: а что делает вызванная стандартная функция, зачем она вызвана в этом месте?
Каждая функция делает то, что задает ее алгоритм. Эта функция – функция getch ожидает, пока не будет введен какой либо символ.
В этой программе вызов функции getch в инструкции-выражение сделан для того, чтобы организовать задержку. Программа не будет выполнять следующие действия, пока не будет введен пользователем любой символ. Программа не будет заканчивать свою работу по закрывающей тело функции main скобке }, пока пользователь не рассмотрит результат работы программы на экране и а после этого не введет символ, в нашей программе не важно какой.