Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

Int s; public:

// Задавання секунд у вигляді рядка timerClass(char *t) {s = atoi(t);}

// Задавання секунд у вигляді цілого числа timerClass(int t) {s = t;}

// Час, який задається в хвилинах і секундах timerClass(int xv, int sec) {s = xv*60 + sec;}

// Час, який задається в годинах, хвилинах і секундах timerClass(int hod, int xv, int sec) {s = 60*(hod*60 + xv) + sec;}

Void Run(); //Таймер відліку часу

};

Void timerClass::Run()

{

clock_t t1 = clock();

while((clock()/CLOCKS_PER_SEC - t1/CLOCKS_PER_SEC)< s); cout«"\a"; II Подання звукового сигналу

}

Int mainO

{

timerClass ObjA(IO); II Створення об'єкта класу ObjA.RunQ;

charstr[80];

cout«"Введіть кількість секунд: сіп » str;

timerCiass ObjB(str); // Динамічна ініціалізація конструктора

ObjB.RunO;

int xv, sec;

cout«"Введіть хвилини і секунди:"; сіп » xv » sec;

timerCiass ObjC(xv, sec); // Динамічна ініціалізація конструктора

ObjC.RunO;

int hod;

cout«"Введіть години, хвилини і секунди:"; сіп » hod » xv » sec; timerCiass ObjD(hod, xv, sec); // Динамічна ініціалізація конструктора ObjD.RunO;

getchO; return 0;

}

Як бачимо, об'єкт ObjA створюється, використовуючи механізм ініціалізації цілочисельної константи. Проте основою для побудови об'єктів ObjB і ObjC слугує інформація, яка вводиться користувачем. Оскільки для об'єкта ObjB користувач вводить рядок, то є сенс перевизначити конструктор timerClassO для прийняття ряд­кової змінної. Об'єкт ObjC також створюється у процесі виконання програми з ви­користанням даних, які вводяться користувачем. Оскільки у цьому випадку час вводиться у вигляді хвилин і секунд, то для побудови об'єкта ObjC логічно вико­ристовувати формат конструктора, що приймає два цілочисельні аргументи. Ана­логічно створюється об'єкт ObjD, для якого час вводиться у вигляді годин, хвилин і секунд, тобто використовується формат конструктора, що приймає три цілочи- сельних аргументи. Важко не погодитися з тим, що наявність декількох форматів ініціалізації конструктора позбавляє програміста від виконання додаткових перет­ворень під час ініціалізації членів-даних об'єктів.

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

Вартоа нати'.аРозробляючи перевизначені конструктори, необхідно досте­менно визначитися у тих ситуаціях, які обов'язково будуть використовува­тися під час виконання програми, а які можна і нехтувати.

  1. Особливості механізму присвоєння об'єктів

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

Код програми 3.6. Демонстрація механізму присвоєння об'єктів #include <vcl>

#include <iostream> // Для потокового введення-виведення #include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

class myClass { // Оголошення класового типу