АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
ПЕРЕЗАГРУЗКА ФУНКЦІЙ._____________________________________________________
| Дано програму, яка використовує об'єкт класу Counterяк лічильник. Він може ініціалізуватися нулем або деяким числом при використанні конструктора, збільшений методом operator++ () і прочитаний за допомогою методу get_count().
|
|
| Припустимо, що ми витратили багато часу і сил на створення класу Counter і він працює саме так, як ми хочемо. Ми цілком задоволені результатом, за винятком однієї речі: нам дуже потрібний метод для зменшення лічильника. Можливо, ми робимо підрахунок відвідувачів банку в конкретний момент часу. При вході відвідувача лічильник збільшує своє значення, при виході - зменшує.
Ми могли б вставити метод зменшення прямо в початковий код класу Counter. Проте існує декілька причин, по яких ми не можемо собі цього дозволити.
По-перше, клас Counter чудово працює, на його відладку витрачена маса часу (звичайно, в даному випадку це перебільшення, але подібна ситуація може мати місце для складніших і більших класів). Якщо ми втрутимося в початковий код класу Counter, то його тестування і відладку доведеться проводити знов, витрачаючи на це й час.
По-друге, в деяких ситуаціях ми просто не маємо доступу до початкового коду класу, наприклад, якщо він розповсюджується як частина бібліотеки класів.
|
|
| Щоб уникнути цих проблем ми можемо використовувати спадкоємство для створення класів на базі Counter. Нижче представлений лістинг програми Counter, в якій з'явиться новий клас COUNTDN, що додає операцію зменшення до класу Counter:
|
|
| Class Counter //базовий клас
{
Protected:
Unsigned int count; //лічильник
Public:
Counter (): count (0) { } // конструктор без параметрів
Counter (int c): count (c)
{ }
Unsigned int get_count () const
{ return count; } // повертає значення лічильника
Counter operator ++ () // збільшує значення
// лічильник (префікс)
{ return Counter (++ count); }
};
Class CountDN: public Counter // клас успадковування
{ Public:
Counter operator -- () // зменшення значення лічильника
{ return Counter (-- count); }
};
//----------------- головна програма
Int main ()
{ CountDN c1; // об’єкт с1
cout<< “\n c1=” << c1.get_count (); // вивід на друк
++c1; ++c1; ++c1; // збільшуємо с1 тричі
cout<< “\n c1=” << c1.get_count (); // вивід на друк
--c1; --c1; // зменшуємо с1 два раза
cout << endl;
Return 0;
}
|
|
|
|
| Програма починається з опису класу Count. Відмітимо, що для простоти ми не включаємо в цю програму операцію постфіксного збільшення, що вимагає використання вторинного перевантаження операції ++.
|
|
|
Рис. 2. Діаграма класів UML для прикладу COUNTEN
|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Поиск по сайту:
|