
- •Примеры
- •Примеры
- •[Править]в объектно-ориентированных языках
- •Параметрический полиморфизм
- •[Править]Специальный полиморфизм
- •[Править]Неявная типизация
- •Статический и динамический полиморфизм
- •Полиморфизм включения
- •Параметрический полиморфизм
- •Полиморфизм переопределения
- •Полиморфизм-перегрузка
- •Сравнение полиморфизма в функциональном и объектно-ориентированном программировании
- •Определение методов класса вне класса
- •Второй пример
- •Что вам необходимо знать
- •25. Inline Функции
- •26. Указатель this
- •27. Селекторы
- •5.1 Сопоставление шаблонов
- •5.2 Синтаксис селекторов
- •5.2.1 Группировка
- •5.3 Универсальный селектор
- •5.4 Селекторы типов
- •5.5 Селекторы потомков
- •5.6 Селекторы дочерних элементов
- •5.7 Селекторы сестринских элементов
- •5.8 Селекторы атрибутов
- •5.8.1 Сопоставление атрибутам и значениям атрибутов
- •5.8.2 Значения атрибутов, используемые в dtd по умолчанию
- •5.8.3 Селекторы классов
- •28. Модификаторы
- •29. Конструкторы
- •Назначение конструктора
- •Виды конструкторов
- •Конструктор по умолчанию
- •Конструктор копирования
- •Конструктор преобразования
- •Виртуальный конструктор
- •Синтаксис
- •Пример Конструктора по умолчания
- •31. Деструкторы
- •Виртуальный деструктор
- •Создание простого конструктора
- •Конструкторы и параметры по умолчанию
- •Перегрузка конструкторов
- •Представление о деструкторе
- •Что вам необходимо знать
- •32. Друзья
- •Определение друзей класса
- •Ограничение количества друзей
- •Что вам необходимо знать
- •Совместное использование элемента данных
- •Использование элементов с атрибутами public static, еслиобъекты не существуют
- •Использование статических функций-элементов
- •Что вам необходимо знать
- •37. Перезагрузка операций
- •Перегрузка унарных операций
- •Перегрузка постфиксных операций
- •Перегрузка бинарных операций
- •38. Преобразования типов
- •Const_cast не применим:
- •39. Наследование
- •Простое наследование
- •Второй пример
- •Что такое защищенные элементы
- •Разрешение конфликта имен
- •Что вам необходимо знать
- •40. Виртуальные функции и полиморфизм Виртуальные функции
- •Перекрытие методов
- •Абстрактные классы и чистые виртуальные функции
- •Модификаторы доступа
- •Ковариантность
Модификаторы доступа
В C++ существует три модификатора доступа к членам классов и структур:
public - доступ для всех
protected - доступ только для самого класса и его наследников
private - доступ только для самого класса
Эти же модификаторы можно указывать при наследовании:
struct B : public A {...}; struct C : protected A {...}; struct D : private A {...};
Если модификатор не указан, то по умолчанию для структур наследование public, для классов private.
public-наследование позволяет установить между классами отношение ЯВЛЯЕТСЯ. Т.е., если класс B открыто унаследован от A, то объект класса B ЯВЛЯЕТСЯ объектом класса A, но не наоборот.
private наследование выражает отношение РЕАЛИЗОВАНО_ПОСРЕДСТВОМ. Если класс B закрыто унаследован от A, то можно говорить, что объект класса B реализован посредством объекта класса A. В большинстве случаев закрытое наследование можно заменить агрегацией.
Следует отметить тот факт, что закрытый(private) виртуальный метод базового класса нельзя вызвать из наследника, но без проблем можно переопределить.
Ковариантность
Пусть имеется класс A, и класс B - его наследник. Тогда возможно определить классы C и D, с виртуальным методом f()следующим образом:
struct A {...}; struct B : A {...}; struct C { virtual A * f(); }; struct D : C { virtual B * f(); }
Такая возможность в C++ называет ковариантностью по типу возвращаемого значения (return type covariance).