33) Полиморфное наследование. Сложный полиморфизм.
Для построения иерархий классов в любом языке программирования должен быть предусмотрен механизм полиморфизма, обеспечивающий возможность определения разных аспектов некоторого единого по названию метода для классов различных уровней иерархии. При этом различают простой полиморфизм, базирующийся на механизме раннего связывания, и сложный полиморфизм, использующий механизм позднего связывания.
Для получения правильного результата в некоторых случаях необходимо использование сложного полиморфизма. Он реализуется механизмом позднего связывания и требует описания виртуальных функций.
Виртуальными называются функции, которые объявляются с использованием ключевого слова virtual в базовом классе и переопределяются (замещаются) в одном или нескольких производных классах. При этом прототипы функций в разных классах должны совпадать не только по именам, но также по типу возвращаемого результата и сигнатуре, хотя алгоритмы, реализуемые такими функциями, как правило, отличаются между собой. Если типы функций различны, то механизм виртуальности для них не включается.
Как уже упоминалось выше, при использовании виртуальных функций
нужный аспект полиморфной функции, вызываемой из метода базового класса,
определяется на этапе выполнения, когда известно, для какого объекта вызван
метод: объекта базового класса или объекта производного. Аналогично, если
вызов функции осуществляется через указатель на базовый класс, нужный
аспект функции вызывается в зависимости от того, адрес объекта какого класса
будет содержать указатель.
- 5)Указатели и ссылки.
- 12) Параметры структурных типов.
- 13) Классы памяти переменных.
- 14) Параметры-функции.
- 15) Правила, определяющие видимость переменных в функциях.
- 16) Пространства имен.
- Int Pages;
- Int getPages(); // тело будет описано в book.Сpp
- 18) Перегрузка функций.
- 19) Функции с параметрами по умолчанию.
- 20) Текстовые файлы. Отличие от Delphi Pascal.
- Int fscanf(file *stream,const char *format[,adress,...]);
- Int fprintf(file *stream,const char *format[,argument,...]);
- 21) Двоичные файлы. Отличие от Delphi Pascal.
- 22) Определение класса, компоненты класса. Ограничение доступа.
- 23) Инициализация полей при отсутствии конструктора.
- 24) Конструкторы. Инициализация полей при наличии конструктора.
- 25) Деструкторы.
- 27) Простое и множественное наследование классов.
- 28) Наследование. Ограничение доступа при наследовании.
- 29) Конструкторы и деструкторы производных классов.
- 30) Композиция.
- 31)Наполнение
- 32) Полиморфное наследование. Простой полиморфизм.
- 33) Полиморфное наследование. Сложный полиморфизм.
- 34) Статические компоненты классов.
- 35) Особенности работы с динамическими объектами.
- 36) Объекты с динамическими полями. Копирующий конструктор.
- Void Print(tPoint r) {…}
- 37) Дружественные функции, методы и классы.
- 38) Переопределение операций.
- 39) Шаблоны классов.
- 40) Шаблоны функций.
- 46) Сигналы, слоты и события Qt.