Для чого потрібні константи? Для зберігання постійної інформації. Як я не хотів би наводити математичні порівняння, проте вони найбільш наочні. Згадайте фізику - гравітаційна стала, температура за Кельвіном, Фаренгейтом і т.п. Все це -константи. Фактично, ми оголосили раз таку змінну і забули про її значення, підставляючи її ім'я в програмі. ви можете запитати, а чому не можна використовувати просту змінну для зберігання такої інформації? А тому, що цієї змінної ви можете присвоїти інше значення, а константі - немає.
Давайте розглянемо синтаксис, а потім я приведу наочний приклад.
У Сі константа визначалася директивою #define
#define PI 3.14 // PI буде містити тепер 3.14
Цю директиву можна зустріти і в багатьох нинішніх програмах, однак це застарілий підхід. В С ++ був введений новий модифікатор const.
const float PI = 3.14;
Цей модифікатор рекомендується завжди використовувати з ваших програмах на С ++.
const float PI = 3.14;
int _tmain (int argc, _TCHAR * argv [])
setlocale (0, »»); // встановимо мову за замовчуванням в (російський)
int S, R = 21; // площа і радіус кола
system ( «pause»); // щоб вікно не закрилося
Де б ми не викликали цю змінну, всюди вона буде дорівнювати 3,14. Дуже зручно, чи не так? До речі, заради експерименту спробуйте привласнити PI якесь значення в програмі. Подивіться, як відреагує компілятор.
Ну і на закінчення по константам можу сказати, що можна в якості константи використовувати арифметичний вираз.
const PROIZV = 23 * 12; // тепер у нас в константі число 276
Крім того, запам'ятайте одне правило - імена констант завжди слід писати великими літерами! Це спростить і вам життя, так як зустрічаючи правильно оформлену константу ви відразу зрозумієте, що це постійна.
Поряд з константами в програмуванні широко використовуються перерахування. За своєю суттю, це набір констант. Вони потрібні для того, щоб обмежити змінної вибір ДІПАЗОН значень. Це може бути день тижня, місяць, ознака по підлозі (чоловік або дружин) і т.п. Особливо широко перерахування знаходять застосування в ігропісаніі.
Що ж, давайте тепер забудемо про те, що я написав вище і розглянемо перерахування на прикладі.
Перерахування дожни оголошуватися поза функції main. Справа в тому, що це тип, який визначається програмістом. А такі типи поряд зі структурами і класами повинні об'вляться, бажано, в окремому модулі. Але ми все це розглянемо значно пізніше. Ось, як оголошується перерахування:
Починається перерахування з ключового слова enum, потім вказується ім'я перерахування (це не змінна.). а в дужках вказується набір значень.
Тепер ми можемо використовувати оголошений тип в нашій програмі:
Звичайно, приклад з місяцем або днем тижні не дуже наочний. Однак ви повинні зрозуміти, що змінну можна обмежити в діапазоні значень. Спробуйте, надайте curMonth значення, відмінне від перерахування і подивіться, як вас назве компілятор J.
А ось в програмуванні, наприклад під Windows, ми будемо часто стикатися з перерахуваннями і константами. Ось там ви повністю зрозумієте всю зручність їх сіпользованія.
Я явно присвоїв Jan значення 1. Іншим місяців компілятор вже сам присвоїть потрібні значення. Звичайно, можна і в ручну все поставити, та тільки немає в цьому сенсу.
Ну і наостанок. Змінну можна оголосити і при завданні перерахування:
Потім цієї змінної вже можна користуватися в програмі. Оголошувати там їх можна багато. Ось тільки особисто я не люблю такий спосіб, вважаючи його кілька заплутаним. В кінці-кінців, ми програмуємо нема на С, а на С ++.
Ось приклад. Нам потрібно розрахувати зарплату співробітника. Ми знаємо ставку години. Потім множимо цю величину на кількість відпрацьованих годин і отримуємо потрібний результат. Тут все просто. Але уявіть собі директора, який наймає співробітника і не знає, скільки йому потрібно платити. Тоді він бере величину зарплати по регіону і ділить її на кількість годин.
int zarp, hour, vel;
vel = 22320; // зарплата в місті дорівнює 22320 рублів
hour = 22 * 8; // кількість годин дорівнює 22 робочих дня * 8 годинний робочий день
zarp = vel / hour; // наш час
cout<<«Час работника стоит =» < Програма нам видасть цифру в 126 рублів. Нас це влаштовує, однак нескладно взяти калькулятор і вирахувати, що насправді число становить 126, 8. І якщо співробітник не образиться на цю борг з нашого боку, то ось в розрахунках такі похибки неприпустимі. Що ж сталося? zarp - це ціле і зберігає воно тільки ціле значення. Дрібна частина буде відкинута. Іншими словами, потрібно було використовувати тип double, який зберігав би дріб. А ось тут ситуація дещо цікавіше. Компілятор тимчасово привласнює змінним hour і vel тип double, як би розширюючи їх значення. Ми про це можемо не здогадуватися, хоча це важливо розуміти. Компілятор, зустрічаючи тип більшого розміру, присвоюються його операнду з типом меншого значення. Ось і все правило. Однак уявіть собі ситуацію, коли параноїдально налаштований програміст марно витрачає пам'ять (ви ж пам'ятаєте, що тип double більше int в 2 рази?) І намагається всюди привласнити саме цей тип. Так, він отримує точне значення, жертвуючи деякою продуктивністю (операції з дробовими типами виконуються повільніше, ніж з цілими, але зараз це вже неактуально), проте штучно себе загоняте в кут. Давайте повернемося до нашого директора, який все не знає, скільки повинен платити за роботу. Припустимо, що скрупульозний бухгалтер дав йому величину години в 132,12 рублів. Ви відразу ж присвоїти йому значення double, почнете розрахунок і завиє, коли всюди з'являться копійки. Ну не треба ж нам працівникові їх видавати! В цьому випадку, якщо ви зробили такий ляп, можна зробити явне приведення. В С це робилося так: (Int) vel; // штучно привели тип до цілого. В С ++ Страупструп ввів нове перетворення. Ось його опис: Рекомендується використовувати саме його, проте сішний варіант широко використовується. Крім того, багато хто навіть і не знають про це другому варіанті перетворення. Перетворення вважаються ознакою поганого тону програмування. Якщо у вас занадто багато перетворень, то, швидше за все, потрібно поміняти всі значення в програмі. Проте, при ООП перетворення використовуються часто. Зациклюватися на них поки не будемо, все одно з практикою ви зрозумієте все відразу. Отже, підіть, відпочиньте. Наступний урок буде складніше і значно важливіше. Поспішаю вас порадувати - залишилося кілька уроків цього фундаменту і ми приступимо вже до нормального програмування.