Розробка власного класу STRING
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
i>
int second; // 0-59
};
Мал.1 Просте визначення класу
Інші частини визначення класу - нові. Мітки public: (відкрита) і private: закрита) називаються специфікаторами доступу до елементів. Будь-які дані-елементи й функції-елементи, обявлені після специфікатора доступу до елементів public: (і до наступного специфікатора доступу до елементів), доступні при будь-якому звертанні програми до обєкта класу Time. Будь-які дані-елементи й функції-елементи, обявлені після специфікатора доступу до елементів private: (і до наступного специфікатора доступу до елементів), доступні тільки функціям-елементам цього класу. Специфікатори доступу до елементів завжди закінчуються двокрапкою (:) і можуть зявлятися у визначенні класу багато разів і в будь-якому порядку. Надалі в тексті нашої роботи ми будемо використовувати записи специфікаторів доступу до елементів у вигляді public і private (без двокрапки).
Гарний стиль програмування: Використовуйте при визначенні класу кожний специфікатор доступу до елементів тільки один раз, що зробить програму більш ясною й простій для читання. Розміщайте першими елементи public, що є загальнодоступними.
Визначення класу в нашій програмі містить після специфікатора доступу до елементів public прототипи наступних чотирьох функцій-елементів: Time, setTime, printMilitary і printStandard. Це - відкриті функції-елементи або відкритий інтерфейс послуг класу. Ці функції будуть використовуватися клієнтами класу (тобто частинами програми, що грають роль користувачів) для маніпуляцій з даними цього класу.
Зверніть увагу на функцію-елемент із тим же імям, що й клас. Вона називається конструктором цього класу. Конструктор - це спеціальна функція-елемент, що ініціалізує дані-елементи обєкта цього класу. Конструктор класу викликається автоматично при створенні обєкта цього класу. Ми побачимо, що звичайно клас має декілька конструкторів; це досягається за допомогою перевантаження функції.
Після специфікатора доступу до елементів private слідують три цілих елементи. Це говорить про те, що ці дані-елементи класу є доступними тільки функціям-елементам класу й, як ми побачимо далі, "друзям" класу. Таким чином, дані-елементи можуть бути доступні тільки чотирьом функціям, прототипи яких включені у визначення цього класу (або друзів цього класу). Звичайно дані-елементи перераховуються в частині private, а функції-елементи - у частині public. Як ми побачимо далі, можна мати функції-елементи private і дані public; останнє не типовим й вважається в програмуванні поганим тоном.
Коли клас визначений, його можна використати як тип в оголошеннях, наприклад, у такий спосіб:
Time sunset, // обєкт типу Time
arrayOfTimes [5], // масив обєктів типу Time
*pointerToTime, // вказівник на обєкт типу Time
&dinnerTime = sunset; // посилання на обєкт типу Time
Імя класу стає новим специфікатором типу. Може існувати безліч обєктів класу як і безліч змінних типу, наприклад, такого, як int. Програміст по мірі необхідності може створювати нові типи класів. Це одна з багатьох причин, з яких C++ є розширюваною мовою.
Програма на мал.2 використовує клас Time. Ця програма створює єдиний обєкт класу Time, названий t. Коли обєкт створюється, автоматично викликається конструктор Time, що явно привласнює нульові початкові значення всім даним-елементам закритої частини private. Потім друкується час у військовому й стандартному форматах, щоб підтвердити, що елементи одержали правильні початкові значення. Після цього за допомогою функцій-елементів setTime встановлюється час і воно знову друкується в обох форматах. Потім функція-елемент setTime намагається дати даним-елементам неправильні значення й час знову друкується в обох форматах.
Знову відзначимо, що дані-елементи hour, minute і second обявлені специфікатором доступу до елементів private. Ці закриті дані-елементи класу звичайно недоступні поза класом. Глибокий зміст такого підходу полягає в тому, що реальне становище даних усередині класу не стосується клієнтів класу. Наприклад, було б цілком можливо змінити внутрішню структуру даних і представляти, наприклад, час усередині класу як число секунд після опівночі. Клієнти могли б використати ті ж самі відкриті функції-елементи й одержувати ті ж самі результати, навіть не усвідомлюючи про зроблені зміни. У цьому сенсі, говорять, що реалізація класу схована від клієнтів. Таке приховання інформації сприяє модифікаційності програм і спрощує сприйняття класу клієнтами.
// FIG 3. CPP // Клас Time.
#include
// Визначення абстрактного типу даних (АТД) Time
class Time{
public:
Time{); // конструктор
void setTime (int, int, int); // установка годин, хвилин
// та секунд
void printMilitary (); // часу у військовому форматі
void printStandard (); // друк часу
// у стандартному форматі
private:
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
// Конструктор Time привласнює нульові початкові значення // кожному елементу даних. Забезпечує погоджене
// початковий стан всіх обєктів
Time Time:: Time () { hour = minute = second =0; }
// Завдання нового значення Time у вигляді воєнного часу. // Перевірка правильності значень даних.
// Обнуління неправельних значень,
void Time:: setTime (int h, int m, int s) {
hour = (h>=0&&h<24)? h: 0;
minute = (m >= 0 && m < 60)? m: 0;
second ~ (s > - 0 && s < 60)? s: Q-; }
// Друк часу у військовому форматі
void Time:: printMilitary ()
{
cout " {hour < 10?"0": "")" hour" ": "
" (minute < 10?"0": "&quo