таким образом, решатьзадачуивыдаватьнаэкранрезультат. "Декларативные" языки
предназначены большедляописаниясамойзадачиижелаемогорезультата, анедей-
ствий компьютера.
"Объектно-ориентированныеязыки" рассчитанынаприменениеособогопод-
хода кописаниюзадач, согласнокоторомувзадачевыделяютсянекоторые "объекты"
с характернымдляних "поведением" ивзаимодействующиемеждусобой. Одиниз
9
первых объектно-ориентированныхязыков–Смоллток, онпредназначенисключи-
тельно дляобъектно-ориентированногопрограммирования. Вотличиеотнего, язык
Си++ обладаеткакобъектно-ориентированнымивозможностями, такисредствами
традиционного процедурногопрограммирования.
Радикальные приверженцыразличныхязыковистилей программирования
иногда делаютэкстравагантныезаявления, выделяющиесемействоязыковилиодин
язык какисключительныйиидеальноподходящийдлялюбыхзадач. Например, до-
вольно распространеномнение, чтообъектно-ориентированныйподходнаиболее
близок кспособурешениязадаччеловеком. Поэтомуповодувысовременемсможе-
те составитьсобственноемнение, т.к. абсолютноистинного, очевидно, нет.
2. Происхождение языка Си++
Язык Си++ былразработанвначале 1980-хгг. БьерномСтрауструпомизком-
пании AT&T Bell Laboratories. Си++ основаннаязыкеСи. Двасимвола "++" вназва-
нии –этоиграслов, символами "++" вязыкеСиобозначаетсяоперацияинкремента
(увеличениезначенияпеременнойна 1). Т.о., Си++ был задуманкакязыкСисрас-
ширенными возможностями. БольшаячастьязыкаСивошлавСи++ какподмножест-
во, поэтомумногиепрограммынаСиможноскомпилировать (т.е. превратитьвнабор
низкоуровневых команд, которыекомпьютерможетнепосредственновыполнять) с
помощью компилятораСи++.
При классификацииязыковпрограммированияязыкСивызываетнекоторые
трудности. Посравнениюсассемблером, этовысокоуровневыйязык. ОднакоСисо-
держит многонизкоуровневых средствдлянепосредственныхоперацийспамятью
компьютера. ПоэтомуязыкСиотличноподходитдлянаписанияэффективных "сис-
темных" программ. НопрограммыдругихтиповнаСимогутоказатьсядовольно
сложными дляпонимания, иестьрядошибок, которымпрограммынаСиособенно
подвержены. Дополнительныеобъектно-ориентированныевозможностиСи++ были
добавлены вСи, вчастности, дляустраненияэтихнедостатков.
3. Стандарт ANSI Си++
Национальный ИнститутСтандартизацииСША (American National Standards
Institution, ANSI) разработал "официальные" стандартыдлямногихязыковпрограм-
мирования, втомчиследляСииСи++. Этистандартысталиобщепринятымииони
имеют оченьбольшоезначение. Программу, целикомнаписанную на ANSI Си++, га-
рантированно можнозапуститьналюбомкомпьютере, длякоторогоимеетсякомпи-
лятор ANSI Си++. Другимисловами, стандартгарантируетпереносимостьпрограмм
на языке ANSI Си++.
В действительностибольшинствоверсийСи++ представляютсобойстандарт-
ный ANSI Си++, дополненныйнекоторымимашинно-зависимымивозможностями.
Эти специфическиесредствапредназначеныдляоблегчениявзаимодействияпро-
грамм сконкретнымиоперационнымисистемами. Вообще, впрограммах, которые
должны бытьпереносимыми, подобнымиспецифическимивозможностямиследует
пользоваться какможнореже. ВтакихслучаяхчастипрограммынаСи++, вкоторых
используются не-ANSI компонентыязыка, целесообразноособымобразомпомечать,
так, чтобыихлегкоможнобылоотделитьотосновнойчастипрограммыимодифи-
цировать длядругихкомпьютеровиоперационныхсистем.
10
4. Среда разработки Microsoft Developer Studio Visual С++
Известно, чтолучшийспособизученияязыкапрограммированиязаключаетсяв
том, чтобыписатьнанемпрограммыипроверять, какониработаютнакомпьютере.
Для этогонеобходимынесколькопрограмм:
•Текстовый редактор, спомощьюкоторогоможнонабиратьиредактировать
исходный текстпрограммнаСи++.
•Компилятор. Этапрограммавыполняетпреобразованиеисходноготекстав
машинные команды, которыекомпьютерможетнепосредственновыпол-
нять.
•Компоновщик, которыйсобираетотдельныескомпилированныечастипро-
граммы вединоецелоеи, принеобходимости, добавляеткнимкомпоненты
из готовыхбиблиотек. Врезультатекомпоновкиполучаетсяготоваякза-
пуску программа–исполняемыйфайл.
•Отладчик, спомощьюкотороголегчеискатьошибкивпрограмме. Ошибки
могут обнаружитьсякакприкомпиляции, такивовремяработыпрограм-
мы.
В данномкурсеизученияСи++ практическиеупражненияпредполагаетсявы-
полнять всредеразработкипрограммMicrosoft Developer Studio Visual C++ для
IBM-совместимыхПКподуправлениемWindows 95/NT. Вэтомпакетеинтегрирова-
ны редактор, компилятор, компоновщикиотладчик. Всевместеониобразуютединую
удобную средупрограммирования. КраткоеописаниеработысосредойVisual C++
приведено вПриложении.
5. Пример программы на Си++
Ниже приведенисходныйтекстпростойпрограммынаСи++.
// В языке Си++ с двойной косой черты начинаются комментарии
// (например, как эта строка). Компилятор игнорирует комментарии,
// начиная от первой черты и до конца строки.
/* Второй способ записи комментариев – после косой черты со звездочкой.
После текста комментария надо поставить звездочку, а затем – косую
черту. Комментарии, записанные подобным образом, могут занимать
больше одной строки. */
/* В программе ОБЯЗАТЕЛЬНО должно быть достаточное количество
комментариев! */
/* Эта программа запрашивает у пользователя текущий год, возраст
пользователя и еще один год. Затем программа вычисляет возраст
пользователя, который будет у него во втором введенном году.*/
#include <iostream.h>
int main()
{
int year_now, age_now, another_year, another_age;
cout << "Введите текущий год и нажмите ENTER.\n";
cin >> year_now;
cout << "Введите свой возраст (в годах).\n";
cin >> age_now;
11
cout << "Введите год, для которого вы хотите узнать свой возраст.\n";
cin >> another_year;
another_age = another_year - (year_now - age_now);
if (another_age >= 0)
{
cout << "В " << another_year << " году вам будет ";
cout << another_age << "\n";
}
else
{
cout << "В " << another_year << " вы еще не родились!\n";
}
return 0;
}
Программа 5.1.
Некоторые свойствапрограммы 5.1 являютсяобычнымидлябольшинствапро-
грамм наСи++. Программаначинается (послекомментариев) соператора
#include <iostream.h>
Этот операторназывается "директивойinclude". Докомпилятораисходный
текст обрабатываетсяпрепроцессором –специальнойпрограммой, котораямодифи-
цирует текстпрограммыпоспециальнымкомандам–директивам. Директивыпре-
процессора начинаютсяссимвола "#". Директиваinclude предназначена длявклю-
чения висходныйтекстсодержимогодругогофайла. Например, впрограмму 5.1
включается файлiostream.h, содержащийописанияфункцийстандартнойбиблиоте-
ки ввода/выводадляработысклавиатуройиэкраном. (Стандартныебиблиотекиязы-
ка Си++ будутрассматриватьсяпозже).
Алгоритм, записанныйвпрограмме 5.1, оченьпростой. Поэтомуструктуру
программы легкопредставитьввидеспискапоследовательновыполняемыхкоманд
(операторов). Схематичнопрограмму, содержащуюсяпоследирективы#include,
можно представитьввиде:
int main()
{
Первый оператор;
...
...
Последний оператор;
return 0;
}
Подобная структураявляетсяобщейдлявсехпрограммнаСи++. Каждыйопе-
ратор втелепрограммызавершаетсяточкойсзапятой. Вхорошоразработанной
большой программебольшинствооператоровявляютсяобращениями (вызовами) к
подпрограммам, которыезаписываютсяпосле функцииmain() или вотдельных
файлах. Каждаяподпрограмма (функция) имеетструктуру, подобнуюфункции
main(). Нофункцияmain() в каждойпрограмметолькоодна. Именноснееначина-
ется выполнениепрограммы. (Подробнеефункциибудутрассматриватьсядалее.)
В концефункцииmain() записана строка:
12
return 0;
Эта строказначит "вернутьоперационнойсистемевкачествесигналаобус-
пешном завершениипрограммызначение 0". Операторвозвратаreturn применяется
не толькопризавершениипрограммы, ноипризавершенииотдельныхподпрограмм.
В любомслучаеэтотоператорвозвращаетопределенноезначениенаболеевысокий
уровень управления.
В программе-примереиспользуются четырепеременные:
year_now, age_now, another_year и another_age
Переменные впрограммированииотличаютсяотматематическихпеременных.
Они используютсякаксимволические имена "фрагментовоперативнойпамятиком-
пьютера". Привыполнениипрограммывразличныемоментывременипеременные
могут хранитьразличныезначения. Впрограмме 5.1 первоеупоминаниечетырехпе-
ременных содержитсявстрокесоператоромописанияпеременных:
int year_now, age_now, another_year, another_age;
Этот операторуведомляеткомпилятор, что дляхранениячетырехпеременных
типа "целоечисло" (integer –int) требуетсявыделитьнеобходимоеколичествопамя-
ти. Этаобластьпамятибудетзарезервированавтечениевыполненияоставшейсячас-
ти программы. Переменныевсегдадолжныбытьописаныдопервогоиспользования.
В программированиихорошимстилемсчитаетсяописаниевсехпеременных, исполь-
зуемых вподпрограмме, вначалеэтойподпрограммы. ВСи++ естьнесколькораз-
личных типовпеременных, ионибудутобсуждатьсянемногопозже.
6. Выполнение ввода/вывода данных и присваивание значений
После компиляции программы ееможнозапустить на выполнение. Результат
выполнения наэкранебудетвыглядетьпримернотак:
Введите текущий год и нажмите ENTER.
2000
Введите свой возраст (в годах).
21
Введите год, для которого вы хотите узнать свой возраст.
2017
В 2017 году вам будет 38
Первая, третья, пятаяиседьмаястрокивыдаютсянаэкранпрограммойспо-
мощью следующегооператора:
cout << Выражение1 << Выражение2 << ... << ВыражениеN;