Базовий і похідний класи
Зміст
Лекції 17-19
Лекції 20-21
Лекції 22-25
Лекції 26-28
Лекція 29
Лекції 17-19
Тема 6 –Успадковування в С++
Вступ
Базовий і похідний класи
Визначення похідного класу
Доступ до базового класу
Специфікатор доступу protected
Недоліки використання специфікатора protected
Конструктори похідного класу
Перезавантаження функцій
Складніший приклад успадковування
Ієрархія класів
Загальне і приватне успадковування
Комбінації доступу
Рівні успадковування
Множинне успадковування
Методи класів та множинне успадковування
Конструктори при множинному успадковуванні
Невизначеність при множинному успадковуванні
Включення: класи в класах
Роль успадковування при розробці програм
Підсумок
Питання по темі
Вступ
Найбільш значимою після класів можливістю ООП є успадковування. Як ми вже знаємо з вивчення Паскалю, це процес створення нових класів, які називаються дочірніми, спадкоємцями або похідними класами з уже існуючих – батьківських або базових. Похідний клас одержує всі можливості базового класу, але може також бути удосконаленим за рахунок додавання власних. базовий клас при цьому залишається незмінним.
В деяких мовах базовий клас називається надкласом, а похідний – підкласом.
Виграш від успадковування полягає в тому, що воно дозволяє використовувати існуючий код кілька раз. Маючи написаний і відлагоджений базовий клас, ми можемо більше його не модифікувати, при цьому механізм успадковування дозволить нам пристосувати його для роботи в різних ситуаціях.
Важливим результатом повторного використання коду є також спрощення поширення бібліотеки класів. Програміст може використовувати класи, створені кимсь іншим, без модифікації кодів, просто створюючи похідні класи, які підходять до конкретної ситуації.
Базовий і похідний класи
В програмах 11.4 і 14.1 ми працювали з класом Counter, який використовували в ролі лічильника. Він міг бути ініціалізованим нулем чи певним числом при використанні конструктора, збільшений методом operator++() і прочитаний за допомогою методу get_count().
Припустимо, що нам потрібний ще один додатковий метод для зменшення лічильника, при цьому ми не хочемо або не маємо змоги змінювати вихідний код класу. Використаємо успадковування для створення нового класу на базі Counter. Далі представлений лістінг програми 17.1, в якому з’явиться новий клас CountOn, що додає операцію зменшення до вихідного класу.
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Counter
{protected:
unsigned int count;
public:
Counter():count(0) //constructor
{ }
Counter (int c):count(c)
{ }
unsigned int get_count()
{return count;}
Counter operator++ ()
{return Counter(++count);
}
};
class CountOn:public Counter //похідний клас
{public:
Counter operator--()
{return Counter(--count);
}
};
////////////////////
int main()
{
clrscr();
CountOn c1;
cout <<"\nc1="<<c1.get_count();
++c1;++c1;++c1;
cout <<"\nc1="<<c1.get_count();
--c1;--c1;
cout <<"\nc1="<<c1.get_count();
cout <<endl;
bioskey(0);
return 0;
}
Програма 17.1
Програма починається з опису класу Count, який залишився майже незміненим. Операцію постфіксного збільшення ми заради простоти не розглядаємо.
Дата добавления: 2015-08-26; просмотров: 2937;