Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проблема обмена информацией (данными) между функциями. Вывести на экран эту сумму и 5




} // 27

{ // 14

Void main (void) // 13

// 12

Вывести на экран эту сумму и 5

Ввести два числа, вычислить их сумму, 4

Единственное действие этой программы - 3

Состоящую из одной функции main 2

Файл first.cpp содержит программу, 1

приветствие "BYE!" 6

7 */

// ============================================= 8

#include <iostream> // 9

#include <conio.h> // 10

using namespace std; // 11

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

Рассмотрим приведенный текст.

Программа содержит функцию main.

Она состоит:

  • из заголовка (строка 13);
  • тела (строки 14 – 27).

Тело функции состоит из инструкций. Каждая инструкция заканчивается точкой с запятой. Инструкций в теле функции всего 11, из них 3 – это инструкции определения объектов nA (строка 15), fltB (строка 16), fltS umma (строка 22).
Эти инструкции создают объекты, выделяя под них память. Напоминаем, что любой объект, имя которого встречается в программе, должен быть определен и определен всего один раз. Инструкции определения объектов легко распознать, они всегда начинаются с имен типов – здесь имена типов int и float (строки 15, 16, 22). Кроме этого в функции определены константные объекты-строки. Константные объекты-строки - это последовательности символов, взятые в двойные кавычки.

Вот эти пять объектов:

"Input numbers: \t "

" \n first int \t "

"second float \t "

"summa = "

" \t BYE!"

Обратите внимание, что почти в каждой из этих строк присутствуют escape-символы (здесь, для того чтобы их разглядеть, они выделены жирным курсивом).

 

 

Стандартные потоковые объекты С++ (cin, cout) и потоковые операторы >>, <<.

 

Кроме объектов na, flt b, 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 скобке }, пока пользователь не рассмотрит результат работы программы на экране и а после этого не введет символ, в нашей программе не важно какой.

 

 

Объект, определенный в программе, обладает двумя свойствами. Это:

- «время жизни» объекта – это время, в течении которого система гарантирует сохранность информации, записанной в его области памяти;

- «область видимости» объекта – это область программы, в которой информация в памяти объекта доступна для обработки (для чтения и изменения).

 

Программа состоит из отдельных объектов – функций. Каждая функция – это независимая область памяти.

Если объект – данное определен в теле функции, то такой объект называется локальным объектом.

Локальный объект «живет» в этой функции, то есть записанная в нем информация не будет разрушена, пока функция активна, то есть выполняются ее инструкции. Локальный объект, определенный в функции «жив», но может быть не виден в ней.

Локальный объект «виден» в функции, то есть информация, записанная в нем, доступна для обработки, только в области памяти этой функции от точки определения объекта в инструкции его определения до конца блока, в котором он определен. Блок задается фигурными скобками { }.

 

В этой функции fun «живут» локальные объекты a, b ( два объекта ), c, x.

 

Объект a определен в параметре, который получен по значению. Его область видимости – все тело функции fun.

Объект b, определенный в параметре, получен по значению. Его область видимости – все тело функции fun, кроме области вложенного блока (желтое пространство).

В этом блоке определен другой объект с именем b. Этот объект «живет» в этом вложенном блоке.Его область видимости от точки определения до скобки, закрывающей этот блок. Этот объект b закрывает в этом месте объект b, определенный в параметре. Объект b, определенный в параметрах функции fun, во вложенном блоке «жив», информация в нем не испорчена, но не доступна.

Обратите внимание, что в инструкции return x + b; виден и используется тот объект b, который определен в параметрах.

Объект х создан в инструкции определения float x;. Его область видимости от этой точки определения до конца блока, ограничивающее тело функции fun.

В инструкции-выражении x = (a * b + c); не правомерно использован объект c. Он «живет» и виден во внутреннем блоке функции.

 

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

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

Есть несколько способов такого обмена информацией. Изучим эти способы.

 




Поделиться с друзьями:


Дата добавления: 2015-06-29; Просмотров: 389; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.