You are on page 1of 14

Алфавіт.

Зарезервовані
слова. Перше знайомство з
С++
План:
• Історія створення та загальна характеристика С++
• Алфавіт. Ідентифікатори.
• Перша програма мовою С++. Загальна структура програми.
Коментарі
• Типи даних
• Переваги мови C++
• Недоліки мови C++
• Майбутній розвиток
• Критика мови C++
1. Історія створення та загальна характеристика С++
C++ (Сі-плюс-плюс) — мова програмування високого рівня з підтримкою декількох парадигм
програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном
Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979
році та початково отримала назву «Сі з класами». Згодом Страуструп перейменував мову у C++ у
1983 р. Базується на мові С. Назва С++ походить від оператора Сі «++» збільшення значення
змінної на одиницю (інкремент)
У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення.
Мову використовують для системного програмування, розробки програмного забезпечення,
написання драйверів, потужних серверних та клієнтських програм, а також для розробки
розважальних програм таких як відео ігри. С++ суттєво вплинула на інші, популярні сьогодні, мови
програмування: С# та Java.
Програми, складені мовою C++, є мобільними, тобто мо­жуть бути виконані на комп’ютерах різних
виробників і в різ­них операційних системах, завдяки чому C++ є особливо
популярною. Найвідоміші середовища програмування для мови С++ : Borland C++, C++ Builder, MS
Visual Studio, Dev C++тощо
2. Алфавіт. Ідентифікатори.
Мови програмування, як і розмовні, мають власний алфавіт - набір допустимих симво­лів.
Алфавіт мови C++ складається з:
• великих і малих літер латинського алфавіту: ”А, ..., Z”, "а, ..., z";
• цифр 0, 1, ..., 9;
• спеціальних символів: " ’ ()[]{}<>•» ;:?! — *+— = / \ І # % $ & ~ ~ @ _
Іден­тифікатор - це назва (ім’я), яку користувач надає об’єктам, наприклад, змінним, сталим,
функціям. Усі ідентифікатори можуть складатися з рядкових чи прописних літер англійського
алфа­віту, цифр, а також містити символ підкреслення. Ідентифіка­тор завжди починається з
букви або із символу підкреслення.
Зауваження 1. Однакові за змістом малі та великі літери у мові C++
вважаються різними символами. Наприклад, імена MyName та myname позначають різні
об’єкти.
Зарезервовані ідентифікатори називаються ключовими словами. Вони використовуються
для написання команд. Змі­нити призначення ключового слова у програмі не можна.
Основні ключові слова мови C++:

Правильні ідентифікатори Неправильні


Cat_Alice cat Alice
CatAlice 1stName -
catAlice deposit%
x2 Cat.Alice
3. Перша програма мовою С++. Загальна структура програми.
Коментарі
Створимо програму мовою С++, що при її виклику виводитиме на
екран повідомлення Hello World!
// Моя перша програма
# include <iostream.h>
int main ()
{
using namespace std;
cout<<"Hello world!";
cout<<endl;
system("pause");
return 0;
}
Розглянемо елементи програми.
Коментар - це фрагмент тексту програми, який слу­гує для пояснення призначення програми
чи окремих команд і не впливає на виконання команд.
Його записують:
// текст коментаря – у випадку якщо він займаєодин рядок
/*текст коментаря*/ у випадку якщо він займає один рядок і більше рядків.
Другий спосіб більш універсальний: коментар можна запису­вати будь-де, не розриваючи
лексем.

Директива #include <iostream.h> и під’єднує бібліотечний файл iostream.h. Саме у цьому файлі
описані функції, які дають змогу виконувати операції введення-виведення даних.
using namespace std; - Бібліотека для функцій затрики курсова на екрані
Далі у програмі записана обов’язкова функціяmаіn(). Клю­чове слово int означає, що
функція main()повертатиме у точку виклику результат цілого типу.
Конструкція cout « забезпечує виведення на екран моні­тора повідомлення.
Команда return слугує для виходу з функції main().Число­вий параметр після return є
результатом (значенням) функції (у цій програмі - 0).
4. Типи даних
Усі дані, які беруть участь у розв’язуванні задачі, ретельно класифікують за типами. Тип визначає допус­
тимі значення даного, операції, які можна над ним виконувати, й обсяг оперативної пам’яті, який
резервується для нього.
Зауваження 1. Обсяг може залежати також від різновиду опе­раційної системи комп’ютера.

У таблиці наведені назви основних числових типів, об­сяги пам’яті, які резервуються
для екземплярів даних цих типів, і діапазони допустимих значень даних.
Числові дані поділяють на ціло чисельні (цілі) та дійсні.
Цілі типи даних
Приклад 1. Оголосимо три змінні цілого типу:
int х, у; short int z;
х = 157; у = -68;
z = 15;
х = 2003;
На етапі компіляції для змінних х, у, z буде надано пев­ний обсяг оперативної пам'яті.
Надати значення цим змінним можна на етапі виконання програми за допомогою команд присвоєння, наприклад, так:
х = 157; у = -68: z = 15;.
У ділянку пам'яті, надану для змінної х, буде занесено число 157, для у - -68, а для 2-15.
Під час виконання програми значення змінних можна змінювати. Наприклад, команда присвоєння х = 2003 занесе у відповідну
для змінної х ділянку пам’яті число 2003 (попе­реднє значення 157 вилучається автоматично).
Приклад 2. Сталі цілого типу можна оголосити так:
const int а = 145;
const long int b = 365978.
Значення даних а та b у програмі змінювати не можна.
Дійсні типи даних
Приклад 2. Розглянемо фрагмент програми
float h;
float pi = 3.1415926;
double v = 365.976;
const float w = -12.5,
h = 23.4;
Тут оголошено дві змінні (h, pi) типу float і змінну v типу double, а також
сталі w = -12.5 float.
Дійсні числа можна записувати у форматі з фіксованою крапкою, наприклад -2.3, 5.0041,
Символьний тип (char). Символьний тип — це множина символів кодової таблиці комп'ютера ASCII. Символьна
ста­ла - це один символ, узятий у лапки на зразок апострофа, або число у 8-, 10- чи 16-й системі числення, яке є
кодом символу у таблиці ASCII.
Приклад 3. Розглянемо описи символьних змінних, де зміннимml, m2, m3 і т4 надамо значення латинської
літери А’ чотирма способами:
char ml = ’А', m2 = 0101, m3 = 65, m4 = 0x41;
Число 65 - це десятковий код символу 'А', 101 - вісімко- вий, 41 - шістнадцятковий. На початку останніх двох
кодів (101, 41) записують префікси "0” чи "0х" відповідно.
Логічний тип (bool). Логічний тип характеризується двома значеннями даних: false (хибність) і true (істина).
Наприклад, bool b = true. Змінні цього типу займають 1 байт у пам’яті ком­п’ютера. У C++ значення змінних
типу intможна асоціювати з логічними значеннями: нулю відповідає значення false, усім ін­шим числам - true.
Зауважимо, що не всі компілятори підтримують тип да­нихbool. Тому, перед тим як його використовувати, варто
з’я­сувати можливості компілятора.
Тип void. Тип void застосовують до функцій, які не по­вертають значення у точку виклику або до функцій без
пара­метрів.
Переваги мови C++
Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти
отримали в свої руки нові можливості і нові засоби.
Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.
Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні,
може легко перетворитися на недолік.)
Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі
компіляції, з використанням шаблонів.
Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП,
узагальнене програмування, метапрограмування (шаблони, макроси).
Недоліки мови C++
Наявність безлічі можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися
важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил
кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від
С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад,
збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».
Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include)
серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів
реалізують механізм прекомпіляциі заголовних файлів (англ. Precompiled Headers).
Недостача інформації про типи даних під час компіляції (CTTI).
Мова C++ є складною для вивчення і для компіляції.
Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.
Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або
важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і
вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і
безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).
З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує
особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що
виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідкок вище згаданого, такий код вельми важко
сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми
метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема
шаблонного метапрограмування.
Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково,
даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови
функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається
якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно
емулювати засобами метапрограмування.
Майбутній розвиток
Сі++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що займаються мовою Сі++ в її
сучасному вигляді і що направляють комітету зі стандартизації Сі++ поради з її поліпшення, — це Boost.
Наприклад, один з напрямів діяльності цієї групи — вдосконалення можливостей мови шляхом додавання в неї
особливостей мета програмування.
Стандарт Сі++ не описує способи іменування об'єктів, деякі деталі обробки винятків і інші можливості, пов'язані з
деталями реалізації, що робить несумісним об'єктний код, створений різними компіляторами. Проте для цього
третіми особами створено безліч стандартів для конкретної архітектури і операційних систем.
Проте (за станом на час написання цієї статті) серед компіляторів Сі++ все ще продовжується битва за повну
реалізацію стандарту Сі++, особливо в області шаблонів — частини мови, зовсім недавно повністю розробленій
комітетом стандартизації.
Одним із каменів спотикання у цьому питанні є ключове слово export, що використовується також і для
розділення оголошення і визначення шаблонів.
Першим компілятором, що підтримав export в шаблонах, став Comeau C++ на початку 2003 року (п'ять років після
виходу стандарту). У 2004 році бета-версія компілятора Borland C++ Builder X також почала його підтримку.
Обидва цих компілятора засновані на зовнішньому інтерфейсі EDG. Інші компілятори, такі як Microsoft Visual C+
+ або GCC, взагалі цього не підтримують. Ерб Саттер (Herb Sutter), секретар комітету із стандартизації Сі++,
рекомендував прибрати export з майбутніх версій стандарту унаслідок серйозних складнощів в повноцінній
реалізації, проте згодом остаточним рішенням було вирішено його залишити.
Із списку інших проблем, пов'язаних з шаблонами, можна навести питання конструкцій часткової спеціалізації
шаблонів, які погано підтримувалися протягом багатьох років після виходу стандарту Сі++
Критика мови C++
C++ успадкувала багато проблем мови C:
Операція присвоювання позначається як =, а операція порівняння як == . Їх легко сплутати, і така конструкція
буде синтаксично правильною, але приведе до важковломимого багу. Особливо часто це відбувається в
операторах if і while, наприклад, програміст може написати if (i=0) замість if (i==0) (Разом з тим, основна
маса компіляторів видає в таких випадках попередження.) Уникнути помилку такого типу можна, якщо
писати всі операції порівняння у такому вигляді: if (0==i). До того ж багато мов (Бейсик, Паскаль)
використовують символ "=" саме в операціях порівняння.
Операції присвоювання (=), інкрементації (++), декрементації (--) та інші повертають значення. У поєднанні з
великою кількістю операцій це дозволяє, але не зобов'язує, програміста створювати код, що важко
читається. З іншого боку, один з основних принципів мов C і C++ — дозволяти програмістові писати в будь-
якому стилі, а не нав'язувати «хороший» стиль. До того ж це іноді дозволяє компілятору створювати
оптимальніший код.
Макроси (#define) є могутнім, але небезпечним засобом. У мові C++, на відміну від C, необхідність в
небезпечних макросах з'являється значно рідше завдяки шаблонам і вбудованим функціям. Але в
успадкованих стандартних С-бібліотеках багато потенційно небезпечних макросів.
Дехто вважає недоліком мови C++ відсутність системи збірки сміття. З іншого боку, в C++ є достатньо засобів
(класи з конструкторами і деструкторами, стандартні шаблони, передача параметрів за посиланням), що
дозволяють майже виключити використання небезпечних вказівників. Проте, відсутність вбудованої збірки
сміття дозволяє користувачеві самому вибрати стратегію управління ресурсами.
Крім того, збірка сміття серйозно уповільнює роботу програми, і це недолік там, де продуктивність є
критично важливою.

You might also like