ISВN 966-0000-00-0 3 страница

В.3.5. Використання функції fclose()....................................... 567

В.3.6. Використання функцій fopen(), fgetc(), fputc() і fclose()............................................................................... 567

В.3.7. Використання функції ferror() і rewind()................ 568

В.3.8. Використання функції fread() і fwrite().................. 568

В.4. Виконання операцій введення-виведення даних з довільним доступом до файлів............................................... 570

В.4.1. Використання функції fseek()......................................... 570

В.4.2. Використання функції fprintf() і fscanf()............. 571

В.5. Видалення файлів......................................................................... 571

Додаток Г. Особливості використання застарілого С++-компілятора................... 572

Додаток Д. .NET-розширения для C++.................... 574

Д.1. Ключові слова .NET-середовища............................................ 574

Д.2. Розширення препроцесора......................................................... 576

Література....................................................................... 577

 


Про автора

Юрій Іванович ГРИЦЮК (5.05.62 р.) – кандидат технічних наук, доцент кафедри обчислювальної техніки і моделювання технологічних процесів (ОТіМТП), член-кореспондент Лісівничої Академії Наук України, керівник редакційно-видавничого відділу Національного лісотехнічного університету України (НЛТУ України, м. Львів), заступник головного редактора збірника науково-технічних праць "Науковий вісник НЛТУ України".

У 1982 році закінчив Коломийський технікум механічної обробки деревини за спеціальністю "Лісопильно-деревообробне виробництво" з присвоєнням кваліфікації техніка-технолога лісопильно-дере­во­обробного виробництва. У 1989 році закінчив технологічний факультет Львівського лісотехнічного інституту (ЛЛТІ) за спеціальністю "Технологія деревообробки" з присвоєнням кваліфікації інженера-технолога деревообробного виробництва.

З 1989 року – асистент, старший викладач (1994), доцент (1998) кафедри ОТіМТП Українського державного лісотехнічного університету (УкрДЛТУ, м. Львів). У 1992 році захистив у ЛЛТІ кандидатську дисертацію на тему: "Оптимізація розкрою ДСП на заготовки".

Основні напрями наукової діяльності: технологія деревообробки; обчислювальна техніка і програмування; моделювання та оптимізація процесів деревообробки; прикладна математика. Опублікував: три монографії "Регулярне розміщування прямокутних об'єктів вздовж смуг односторонньо обмеженої стрічки" (2002), "Оптимізація технологічного процесу розкрою плитних деревних матеріалів на меблеві заготовки" (2004) і "Моделювання карт і оптимізація плану розкрою плитних деревних матеріалів на меблеві заготовки" (2005); три навчальних посібники, серед яких "Обчислювальна техніка, алгоритмізація і програмування мовою Pascal" (1995); понад 80 наукових статей у вітчизняних і зарубіжних виданнях.

 


Передмова

Процес оволодіння навиками програмування мовою С++ має багато спільного з науково-дослідною діяльністю. Це, передусім, пов'язано з тим, що ця мова поєднує декілька технологій програмування – традиційну, тобто процедурне програмування (представлене мовою С), об'єктно-орієнтоване програмування (представлене таким поняттям як клас, який підвищує потужність мови С++ порівняно з мовою С) і узагальнене програмування (програмування за допомогою шаблонів мови С++). Мова С++ постійно перебуває в стані розвитку, позаяк відбувається її доповнення новими функціональними можливостями, однак на даний час, з прийняттям у 1998 р. стандарту ISO/ANSI С++, специфікація мови стабілізувалася. Сучасні компілятори підтримують більшість функцій, дозволених цим стандартом, і більшість програмістів мали час звикнути до цих функцій.

У цьому навчальному посібнику огляд основ програмування мовою С дається в поєднанні з представленням функціональних можливостей мови С++, що робить його самодостатнім. Це означає, що студент вчиться не тільки виконувати дії з новими компонентами мови С++, але й опановує її основу – мову С. Вивчення починається з тих елементів мови, які є спільними для С і С++. Окрім того, тут особливо акцентовано на тих поняттях мови, важливість яких стане очевидною в процесі подальшого вивчення матеріалу, а також на відмінностях між мовами С і С++. Після того, як студент твердо засвоїть основи програмування мовою С++, до неї додадуться надбудови у вигляді об'єктно-орієнтованого підходу до процесу програмування мовою С++. Таким чином, він зможе скласти цілісне уявлення про те, що таке об'єкти, класи, шаблони і як вони реалізуються стандартом мови С++. У процесі викладення матеріалу опис тих чи інших положень мови продемонстровано невеликими навчальними програмами-прикладами, які студенту нескладно скопіювати і самостійно випробувати на власному комп'ютері.

Матеріал цього навчального посібника значною мірою відповідає робочим навчальним програмам таких дисциплін як "Обчислювальна техніка і програмування", а також "Об'єктно-орієнтоване програмування", які викладаються у Національному лісотехнічному університеті України (м. Львів) для студентів, що вивчають комп'ютерні науки.

Ми (автор, рецензенти і літературний редактор) приклали багато зусиль, щоби зробити матеріал цього навчального посібника конкретним, простим для розуміння, засвоєння та, що найважливіше, цікавим. Наша мета полягала у тому, щоби внаслідок вивчення того чи іншого матеріалу студенти могли створювати свої власні навчальні програми і, водночас, знаходити в цьому як користь, так і задоволення.

Подяки

Автор вдячний усім тим, хто так чи інакше сприяв написанню цього навчального посібника. Особлива подяка завідувачу кафедри ОТіМТП НЛТУ України, професору Ярославу Івановичу СОКОЛОВСЬКОМУ за цінні вказівки і безпосередню підтримку.

Ав­тор вис­лов­лює вдяч­ність рецензентам про­фе­со­ро­ві _._. ______, про­фе­со­ро­ві _._. _______ і про­фе­со­ро­ві _._. _________, а та­кож лі­те­ра­тур­но­му ре­дак­то­ру В.В. ДУД­КУ за цін­ні за­у­ва­жен­ня та уточ­нен­ня, які спри­яли знач­но­му пок­ра­щен­ню ру­ко­пи­су.

Ав­тор з вдяч­ніс­тю прийме будь-які конструк­тив­ні за­ува­жен­ня сто­сов­но викладеного у посібнику матеріалу, які мож­на над­си­ла­ти за ад­ре­сою:

79057, м. Львів, НЛТУ України, вул. Ге­не­ра­ла Чуп­рин­ки, 103. Ка­фед­ра ОТ і МТП.

Тел./факс: 233‑96‑95; 237‑82‑55; 241‑96‑81. E-ma­il: nv@fo­rest.lviv.ua


Вступ

Основне завдання цього навчального посібника – навчити студентів розробляти програми мовою C++ з використанням процедурного та об'єктно-орієнтованого підходів. Необхідно зазначити, що протягом декількох останніх років на ринку програмного забезпечення відбулися значні зміни, які є очевидними навіть для не професіонала. Тому ще одне завдання цього навчального посібника полягає в тому, щоб викласти основні концепції ООП мовою C++ у контексті розвитку сучасного програмного забезпечення.

Серед студентів часто побутує думка, згідно з якою мову програмування C++ важко вивчити. Насправді вона має багато спільного з такими мовами програмування як Pascal чи Visual Basic, за винятком декількох вдало реалізованих нових ідей. Забігаючи наперед, зазначимо, що ці ідеї є цікавими та захопливими, тому їх вивчення навряд чи виявиться для Вас нудним. Окрім того, про зміст цих ідеї необхідно мати уявлення хоча би тому, що вони є не тільки основою сучасних технологій програмування і створення програмних продуктів, але й становлять значну частину "культури програмування".

Будемо сподіватися на те, що цей навчальний посібник допоможе студентам розібратися як зі специфікою ООП мовою C++, так і у загальних концепціях створення програмних продуктів. Запропонований матеріал буде корисним як студентам, що вивчають програмування, так і професійним програмістам – не фахівцям з області ООП, а також усім тим, хто має інтерес до даної області знань.

Нові концепції створення програмних продуктів

Донедавна більшість професійних програмістів реалізовували свої програмні проекти з використанням технології структурного чи процедурного програмування. Із зростанням обсягів оброблюваної інформації, зростанням вимог користувачів до програмних продуктів значно зростали розміри кодів розроблюваних програм. Щоразу перед розробленням нового проекту програмістам ставало дедалі очевидніше, що такі підходи є невдалими. Проблема полягала, передусім, у непропорційному зростанні складності процесу створення самих кодів програм порівняно зі зростанням вимог до програмного продукту.

Мабуть, буде справедливим твердження про те, що досконалі та вишукані програми, без перебільшення, належать до найскладніших творінь людини. Проте, зважаючи на надмірну складність, такі програми нерідко містять помилки – добре, якщо не значні. Бо інколи серйозні помилки у програмному забезпеченні потенційно спричиняють матеріальні збитки (наприклад, помилки у бухгалтерських чи банківських розрахунках), а іноді і загрожують життю багатьох людей (наприклад, під час керування атомними реакторами, авіапольотами чи космічним кораблем).

Внаслідок довготривалої боротьби з проблемою складності процесу написання кодів програм були вироблені нові концепції створення програмних продуктів, а саме:

● об'єктно-орієнтоване програмування (ООП|);

● уніфікована мова моделювання (UML);

● спеціалізовані засоби розроблення сучасного програмного забезпечення.

У декого може виникнути слушне запитання: чому об'єктно-орієнтований підхід до програмування став пріоритетним під час розроблення більшості сучасних програмних продуктів? Відповідь може бути такою: ООП пропонує новий потужний механізм вирішення проблеми процесу написання складних кодів програм. А саме: замість того, щоб розглядати програму як набір послідовно виконуваних настанов, у ООП код програми представляється у вигляді сукупності деяких об'єктів, що мають схожі властивості і набори відповідних дій, які можна з ними проводити. Можливо, все те, про що тут буде сказано, здаватиметься Вам спочатку незрозумілим. Але це тільки доти, доки Ви не почнете детально вивчати відповідні розділи ООП з цього навчального посібника. З поступовим засвоєнням відповідного матеріалу Ви не раз переконаєтеся в тому, що застосування об'єктно-орієнтованого підходу до процесу програмування робить коди програм більш зрозумілими, надійними і простими для удосконалення.

Уніфікована мова моделювання (UML) – це не що інше, як графічне подання алгоритму розв'язання задачі з застосуванням об'єктно-орієнтованого підходу. Згідно з визначенням, UML – це графічна мова, що містить безліч різних діаграм, які допомагають фахівцям з системного аналізу створювати алгоритми, а програмістам – з'ясовувати принципи роботи програми. UML є потужним інструментом, який дає змогу зробити процес програмування більш легким і ефективним. Кожен новий засіб реалізації основних елементів UML викладено у тому місці, де він стає корисним для ілюстрації основних концепцій ООП|. Наприклад, діаграми класів UML вивчаються одночасно з взаємодією різних класів, а узагальнення – у зв'язку з поняттям успадкування. Таким чином, у читача з'являється можливість, не докладаючи зайвих зусиль, засвоїти основні концепції мови UML, яка одночасно сприятиме більш ефективному засвоєнню ООП мовою C++.

Одним із спеціалізованих засобів розроблення сучасного програмного забезпечення є система візуального ООП під назвою С++ Builder 6 і попередні її версії. Система призначена для створення завершених додатків для Windiws найбільш різноманітної спрямованості, від суто обчислювальних і логічних – до графічних і мультимедійних. наголосимо, що у цьому посібнику, окрім вивчення процедурного та об'єктно-орієнтованого програмування мовою C++, зовсім не приділено уваги спеціалізованим засобам розроблення сучасного програмного забезпечення, оскільки цей матеріал належить до іншої дисципліни.

Сучасні об'єктно-орієнтовані мови програмування

Зі всіх об'єктно-орієнтованих мов програмування найчастіше використовується мова C++. Мова програмування C++ отримала набагато більшу популярність, ніж такі мови як Pascal, Visual Basic чи C, бо вона стала потужним інструментом для розроблення складного програмного забезпечення. У синтаксичному плані мови C і C++ дуже схожі між собою. Понад це, мова програмування C++ є надбудовою мови C. Завдяки цьому відпала потреба перед вивченням мови програмування C++ вивчати мову С. Ті студенти, які мають навики роботи мовою C, можуть знехтувати частиною матеріалу, викладеного на початкову цього посібника, проте решта інформації буде для них новою і корисною для засвоєння.

Окрім того, ООП мовою С+ містить декілька нових концепцій, які можуть бути незнайомі тим, хто практикує програмування такими традиційними мовами, як Pascal, Visual Basic і C. До цих концепцій належать класи, успадкування і поліморфізм, які становлять основу об'єктно-орієнтованого підходу до створення сучасних програмних продуктів. Проте, вивчаючи специфічні особливості об'єктно-орієнтованих мов, необізнаним програмістам досить легко піти манівцями від цих понять. Багато сучасних авторів разом з описом різних мов програмування вдаються до детального опису можливостей тієї чи іншої мови, не приділяючи зовсім уваги тому, чому ці можливості існують. У цьому навчальному посібнику нюанси ООП мовою С++ розглянуто у безпосередньому його зв'язку з базовими концепціями сучасних технологій програмування та створення програмних продуктів.

Мова програмування Java, що є останньою розробкою в області об'єктно-орієнто­ва­них мов, позбавлена таких складових, як покажчики, шаблони і множинне успадкування, що зробило її менш могутньою і гнучкою порівняно з мовою C++. З огляду на те, що синтаксис мов Java і C++ дуже схожі, тому отримані студентами знання стосовно мови програмування C++ з успіхом можуть бути використані під час самостійного вивчення мови Java. Деякі інші об'єктно-орієнтовані мови, серед яких є і мова С#, також успішно розвиваються, проте їх розповсюдження значною мірою поступається мові C++.

Донедавна мова C++ розвивалася поза рамками відповідних стандартів, тобто кожен виробник компіляторів по-своєму реалізовував окремі нюанси мови. Проте комітет зі стандарту мови С++ організації ANSI/ISO[1] розробив документ, який на сьогодні відомий під назвою "Стандарт C++". Згідно з цим документом, мова програмування C++ містить ряд уточнень і доповнень, які стосувалися раніше мов С і С++, а також багато додаткових можливостей, наприклад, стандартну бібліотеку шаблонів (бібліотека STL). Ця бібліотека надає програмісту доступ до шаблонних класів і функцій загального призначення, які реалізують багато популярних і часто використовуваних алгоритмів і структур даних. Наприклад, вона містить підтримку векторів, списків, черг і стеків, а також визначає різні функції, які забезпечують до них доступ.

Деякі засоби мови програмування C було замінено на аналоги з описом мови програмування C++. Наприклад, у мові C такі основні функції введення/виведення даних як printf() і scanf() у мові C++ практично не використовують, оскільки cin і cout є більш зручними для введення та виведення потокової інформації. З аналогічної причини замість макровизначення #define, типового для мови С, практично скрізь використовується специфікатор const і вбудовані функції C++. Тому у цьому посібнику опущено описи цих і деяких інших функцій.

Оскільки основну увагу в цьому навчальному посібнику сконцентровано на ООП мовою С++, то ми вилучили з детального розгляду ті засоби мови C, які рідко використовуються і не мають відношення до об'єктно-орієнтованого підходу. Прикладом одного з таких засобів є побітові операції мови C, які розглядаються тільки частково у роз. 10.4, і то тільки стосовно бітових полів структур.

Усі розглянуті у цьому навчальному посібнику коди програм повністю задовольняють вимогам стандарту мови програмування C++ за незначними винятками, які зумовлені некоректною роботою компіляторів. Окремий розділ присвячено бібліотека STL (стандартній бібліотеці шаблонів), що є частиною стандарту мови програмування C++.

Базові знання, необхідні студентам для вивчення цього навчального посібника

Матеріал, викладений у цьому навчальному посібнику, доступний навіть тим студентам, хто вивчає програмування "з нуля". Проте наявність досвіду програмування такими мовами, як Pascal чи Visual Basic, не стоятиме на заваді при засвоєнні матеріалу з цього посібника.

Багато підручників з описом мови програмування C++ розраховано на те, що студенти вже знайомі з мовою C. Наш навчальний посібник в цьому сенсі є винятком, позаяк вивчення мови програмування C++ починається "з чистого листа", і відсутність знань з мови C ніяк не позначиться на ефективності засвоєння ООП мовою C++. Студенти, знайомі з мовою C, напевно звернуть увагу на те, як мало існує відмінностей між мовами C і C++.

Бажано також, щоб студенти, вивчаючи матеріал з цього навчального посібника, мали уявлення про основні операції Microsoft Windows, такі, як запуск програм на виконання, копіювання файлів тощо.

Можливо, викладачам і іншим нашим читачам, які вже володіють мовою C++, буде цікаво детальніше ознайомитися з нашою концепцією висвітлення матеріалу, а також підходом, який ми пропонуємо під час вивчення ООП мовою C++.

Послідовність подання матеріалу

У цьому посібнику вивчення процесу програмування починається з найпростіших прикладів розроблених програм мовою С++, поступово ускладнених і закінчуючи повноцінними об'єктно-орієнтованими програмами. Інтенсивність подання нового матеріалу є такою, що у студента є можливість без зайвого поспіху його вивчити і, при потребі, повторити пройдений. Для полегшення процесу засвоєння нового матеріалу у кожному розділі цього посібника наведено достатню кількість наочних прикладів з програмною їх реалізацією, а також детальним аналізом їх програмних блоків. Окрім того, у кінці кожного розділу наведено контрольні запитання і вправи, що у сукупності дає змогу використовувати навчальний посібник як практичну допомогу зацікавленим студентам під час написання курсових чи дипломних робіт.

Кожен розділ цього посібника містить близько 15 вправ, що передбачають розроблення студентами завершених програм мовою C++. Розв'язання перших 3-4 вправ наведено у додатку Ж. Решта вправ розраховано на самостійне їх виконання. Хоча у посібнику і не наводяться розв'язки (коди програм) для тих вправ, які не помічені знаком *, проте їх, як і самі приклади запропонованих читацькій увазі кодів програм можна знайти на сайті видавництва за такою адресою:

http://www.nufwtulviv.com.ua

Вправи кожного розділу відрізняються між собою за ступенем складності. Перші за порядком вправи зазвичай є легкими, а ближче до кінця списку розташовуються найбільш складні вправи. Це створює зручність для викладачів, які отримають можливість забезпечувати своїх студентів індивідуальними завданнями, що відповідають рівню їх підготовки.

Технічне і програмне забезпечення

Найбільш популярним середовищем для розроблення програм мовою C++ є продукт, який був запропонований спільно компаніями Microsoft і Borland, призначений для роботи під управлінням операційних систем Microsoft Windows. Наведені у цьому навчальному посібнику приклади кодів програм розроблено так, що вони підтримуються як компіляторами Microsoft, так і компіляторами Borland (детальнішу інформацію про компілятори можна знайти у відповідних документаціях до "Microsoft Visual C++" і до "Borland C++ Builder". Інші компілятори, розраховані на стандарт мови програмування C++, безпомилково сприйматимуть більшість кодів програм у тому вигляді, у якому їх наведено у цьому навчальному посібнику.

Для того, щоб будь-який з компіляторів міг працювати на Вашому комп'ютері, Вам потрібно забезпечити достатній вільний дисковий простір, відповідний об'єм оперативної пам'яті та швидкодію процесора. Ці параметри можна дізнатися у настанові з експлуатації відповідних пристроїв.

Звернемо Вашу увагу на те, що у цьому навчальному посібнику містяться навчальні приклади програм, початкові коди яких є консольними, тобто такими, що виконуються в текстовому вікні компілятора або безпосередньо в управлінському вікні MS DOS. Це зроблено для того, щоб уникнути складнощів, які виникають під час роботи з повноцінними графічними додатками Windows.

Процес розроблення прикладного програмного забезпечення стає все більш і більш важливим аспектом технології програмування. Шкода, але часто процес створення об'єктно-орієнтованої програми залишається для студентів загадкою. Це послужило для нас приводом помістити у навчальний посібник спеціальний розділ, що стосується процесу розроблення сучасного програмного забезпечення, де основну увагу приділено реалізації концепції об'єктно-орієнтованому підходу (див. дод. А).

Орієнтовний порядок вивчення ООП|

У цьому посібнику початкові розділи (з 1-го по 10-ий) присвячено вивченню процедурно-орієнтованої концепції програмування, властивої мові C++. А вже після цього детально розглянуто концепцію ООП|. Таким чином, початковим нашим завданням є розгляд основ процедурного програмування мовою С++. Це стосується насамперед тих студентів, хто ще недостатньо володіє початковими навиками програмування мовою С++. Особливу увагу тут варто звернути на ті розділи, які стосуються застосування покажчиків, С++-функцій та засобів програмування для розширення їх можливостей, С++-специфікаторів і спеціальних операторів, а також структури та об'єднання даних.

Після цього ООП мовою С++ починається з безпосереднього вивчення механізму реалізації класів – фундаменту, на якому побудовано С++-підтримку ООП, а також ядро багатьох набагато складніших програмних засобів. Особливу увагу тут необхідно звернути на ті розділи, які стосуються роботи з класами, механізму перевантаження операторів, успадкування в класах, застосування віртуальних функцій та поліморфізму, шаблонів у класах, оброблення виняткових ситуацій, С++-системи введення-виведення потокової інформації тощо.

Деякі питання у цьому навчальному посібнику розглядаються дещо раніше, ніж це прийнято в іншій літературі з описом мови програмування C++: наприклад, розгляд структур передує розгляду класів. Причиною цього є те, що клас – це не що інше, як синтаксичне розширення структури, тому, як наслідок, структура є ключем до розуміння ООП мовою C++.

З самого початку висвітлення матеріалу у цьому навчальному посібнику використано С++-систему введення-виведення різних даних, але не дано докладних пояснень з механізму її реалізації. Оскільки С++-система введення-виведення побудовано на ієрархії класів, то її теорію і деталі реалізації неможливо засвоїти, не розглянувши спочатку механізм реалізації класів, успадкування в класах і оброблення виняткових ситуацій. На нашу думку, якраз після цього і настає момент для докладного вивчення С++-засобів введення-ви­ве­дення потокової інформації.

 


Частина І. Основи програмування мовою С++

 

 

У цій частині навчального посібника будуть розглядатися такі основні теми:

Розділ 1. Історія виникнення мови програмування С++........................................... 27

Розділ 2. Основні елементи мови програмування С++........................................... 34

Розділ 3. Основні типи даних у мові програмування C++........................................... 54

Розділ 4. Поняття про настанови керування ходом виконання С++-програми.............. 71

Розділ 5. Масиви та рядки – засоби групування взаємопов'язаних між собою змінних.................................................... 90

Розділ 6. Особливості застосування покажчиків.......................................................... 109

Розділ 7. Основи застосування С++-функцій 128

Розділ 8. Використання засобів програмування для розширення можливостей С++-функцій........................ 153

Розділ 9. С++-специфікатори та спеціальні оператори............................................................. 173

Розділ 10. Поняття про структури і об'єднання даних........................................................................ 202

 


Розділ 1. Історія виникнення| мови програмування С++

Мова програмування С++ – єдина з найрозвиненіших мов, яку може засвоїти будь-який програміст. Ця заява може видатися дуже серйозною, але вона – не перебільшення. Мова програмування С++ – це центр притягання, навколо якого "обертається" все сучасне програмування. Її синтаксис і принципи розроблення визначають суть об'єктно-орієнтованого програмування. Понад це, мова C++ вторувала шлях для розроблення багатьох інших мов майбутнього. Наприклад, моти Java та С# – прямі "нащадки" мови C++. Мову C++ також можна назвати універсальною мовою програмування, оскільки вона дає змогу програмістам обмінюватися різноманітними ідеями. Сьогодні бути професійним програмістом високого класу означає бути компетентним у мові C++. Мова програмування С++ – це ключ до сучасного програмування.

Приступаючи до вивчення мови програмування C++, важливо знати, як вона вписується в історичний контекст мов програмування. Розуміючи, що привело до її створення, які принципи розроблення вона представляє і що вона успадкувала від своїх попередників, студентам буде легше оцінити суть новаторства і унікальність засобів мови програмування C++. Саме тому у цьому розділі студентам запропоновано зробити короткий екскурс в історію створення мови програмування C++, заглянути в її витоки, проаналізувати її взаємостосунки з безпосереднім попередником, тобто мовою програмування С, розглянути її можливості (області застосування) і принципи програмування, які вона підтримує. Тут також студент дізнаєтеся, яке місце займає мова C++ серед інших мов програмування.

1.1. Витоки мови програмування C++

Історія розроблення мови програмування C++ починається з мови С, тобто, тобто її побудовано на фундаменті С. Мова програмування C++ насправді є надбудовою мови С. Це означає, що всі компілятори C++ можна використовувати для компілювання С-програм. Мову C++ можна назвати розширеною і поліпшеною версією мови С, у якій реалізовані принципи об'єктно-орієнтованого програмування. Мова програмування C++ також містить ряд інших удосконалень мови С, наприклад розширений набір бібліотечних функцій. При цьому "смак і запах" мова C++ успадкувала безпосередньо з мови програмування С. Щоб до кінця зрозуміти і оцінити перевага мови програмування C++, необхідно зрозуміти все "як" і "чому" відносно мови С.

1.1.1. Причини створення мови програмування С

Поява мови С потрясла комп'ютерний світ. Її вплив не можна було переоцінити, оскільки вона докорінно змінила підхід до методології програмування і його сприйняття. Мова С стала вважатися першою сучасною "мовою програміста", оскільки до її винаходу комп'ютерні мови в основному розроблялися або як навчальні вправи, або як результат діяльності бюрократичних структур. З появою мови програмування С все йшло інакше. Вона була задумана і розроблена реальними, практикуючими програмістами і відображала їх підхід до методології програмування. Її засоби були багато разів продумані, відточені та протестовані користувачами, які дійсно працювали з нею. Як наслідок, з'явилася мова, яка була сприйнята багатьма програмістами-практиками. Мова С швидко знайшла багато прихильників, у яких виникло до неї найщиріші почуття, що сприяло широкому її використанню різними програмістами. Коротше кажучи, С – це мова програмування, яку було розроблено програмістами для програмістів. Саме це і зумовило її шалений успіх.

Мову програмування С винайшов Деніс Рітчи (Dennis Ritchie) для комп'ютера PDP-11 (розробка компанії DEC – Digital Equipment Corporation), який працював під управлянням операційної системи (ОС) UNIX. Мова С – це результат процесу розроблення, який спочатку був пов'язаний з іншою мовою – BCPL, створеною Мартіном Річардсом (Martin Richards). Мова BCPL індукувала появу мови, що отримала назву В (її автор – Кен Томпсон (Ken Thompson)), яка сама привела до розроблення мови С. Це трапилося на початку 70-х років.

Впродовж багатьох років стандартом для мови програмування С де-факто слугувала мова, підтримувана ОС UNIX і описана в книзі Брайана Кернігана (Brian Kernighan) і Деніса Рітчи The C Programming Language (Prentice-Hall, 1978). Проте формальна відсутність стандарту стала причиною розбіжностей між різними реалізаціями мови С. Щоб змінити ситуацію, на початку літа 1983 р. було започатковано комітет із створення ANSI-стандарту, покликаного – раз і назавжди – визначити мову програмування С. Кінцеву версію цього стандарту було прийнято у грудні 1989 р., а його перше видання стало доступним для програмістів на початку 1990 р. Ця версія мови С отримала назву С89, тому саме вона стала фундаментом для побудови мови C++.