
- •1.Поняття наслідування. Ключі доступу.
- •2.Простое наследование
- •3.Віртуальні методи
- •4. Механізм пізнього зв'язування
- •5.Абстрактні класи
- •6.Множественное наследование
- •7. Обробка виключень. Загальний механізм обробки виключень. Синтаксис виключень.
- •Перехоплення виключень. Список виключень функції.
- •Несподівані виключення та їх обробка.
- •Виключення в конструкторах та деструкторах.
- •Ієрархія виключень.
- •Поняття шаблону функцій.
- •Перевантаження та спеціалізація шаблону функцій.
- •Поняття шаблону класів.
- •Конкретизація та спеціалізація шаблонів класів.
- •Контейнери бібліотеки stl. Види контейнерів. Загальні поля та методи контейнерів. Ітератори. Контейнеры
- •Итераторы
- •Послідовні контейнери. Характеристика операцій, що підтримуються послідовними контейнерами.
- •Вектор. Характеристика та приклад вектора.
- •Двостороння черга (deque). Характеристика та приклад deque.
- •Список (list). Характеристика та приклад списку.
- •Стек. Характеристика та приклад стеку.
- •Операції зі стеком
- •Черга (queue). Характеристика та приклад черги.
- •Асоціативні контейнери. Загальна характеристика.
- •Словники (map). Приклад словника.
- •Множини (set). Приклад множини.
- •Бітова множина. Приклад.
4. Механізм пізнього зв'язування
Коли різні класи в ієрархії перевизначають деякий метод, дуже корисна можливість посилатися на загальний об'єкт цих класів (завдяки сумісності підкласів) і викликати цей метод, результатом чого буде виклик методу належного класу. Для цього компілятор повинен підтримувати пізніше зв'язування, тобто не генерувати виклик специфічну функцію, а чекати, поки під час виконання не визначаться фактичний тип об'єкта і функція, яку потрібно викликати.
C + +: У C + + пізніше зв'язування є тільки для віртуальних методів (виклик яких стає трохи повільніше). Метод, оголошений в базовому класі як віртуальний (virtual), підтримує це властивість (але тільки якщо опису методів збігаються). Звичайні, не віртуальні методи не дозволяють пізніше зв'язування, як і OP.
OP: У Object Pascal пізніше зв'язування вводиться за допомогою ключових слів virtual і dynamic (різниця між ними тільки в оптимізації). У похідних класах перевизначення методи повинні бути відзначені словом override (це змушує компілятор перевіряти опис методу). Раціональне пояснення цій особливості OP полягає в тому, що дозволяється більше змін в базовому класі і надає деякий додатковий контроль під час компіляції.
Java: У Java всі методи використовують пізніше зв'язування, якщо ви не відзначите їх явно як final. Фінальні методи не можуть бути перевизначено і викликаються швидше. У Java написання методів з потрібною сигнатурою життєво важливо для забезпечення поліморфізму. Той факт, що в Java за замовчуванням використовується пізніше зв'язування, тоді як в C + + стандартом є раннє зв'язування, - явна ознака різного підходу цих двох мов: C + + часом жертвує ГО моделлю на користь ефективності, тоді як Java - навпаки
Примітка: Пізніше зв'язування для конструкторів та деструкторів. Object Pascal, на відміну від інших двох мов, дозволяє визначати віртуальні конструктори. Всі три мови підтримують віртуальні деструктори.
5.Абстрактні класи
Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общиеабстракции, то есть имеющие наибольший объем и наименьшее содержание.
В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, Delphi), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов (например, Java), именно для запрещения создания экземпляров. Абстрактный класс можно рассматривать в качестве интерфейса к семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь определённые методы, а также свойства.
Абстрактные методы часто являются и виртуальными, в связи с чем понятия «абстрактный» и «виртуальный» иногда путают.