ЯиМП_Лекция2_С++_ООП_наследование_полиморфизм.ppt
- Количество слайдов: 33
Что такое наследование? Наследование позволяет создавать иерархию объектов, в которой объекты-потомки наследуют все свойства своих предков и имеют собственные. Зачем нужно свойство наследования? Упрощает программирование, сокращает объём программы, уменьшает количество описаний классов. Приведите пример иерархии классов.
Если базовый класс наследуется с модификатором private, можно выборочно сделать некоторые его элементы доступными в производном классе: class Base {. . . public: void f(); }; class Derived : private Base {. . . public: Base: : void f(); };
monster *p; // Описывается указатель на базовый класс p = new daemon; /* Указатель ссылается на объект производного класса */ Вызов методов объекта происходит в соответствии с типом указателя, а не фактическим типом объекта, на который он ссылается, поэтому при выполнении оператора, например, p -> draw(1, 1, 1, 1); будет вызван метод класса monster, а не класса daemon Этот процесс называется ранним связыванием
virtual void draw(int x, int y, int scale, int position); Объявление виртуального метода. Чисто виртуальный метод содержит признак = 0 вместо тела, например: virtual void f(int) = 0; Если определить метод draw в классе monster как виртуальный, решение о том, метод какого класса вызвать, будет приниматься в зависимости от типа объекта, на который ссылается указатель:
monster *r, *p; r = new monster; // Создается объект класса monster p = new daemon; // Создается объект класса daemon r -> draw(1, 1, 1, 1); // Вызывается метод monster: : draw p -> draw(1, 1, 1, 1); // Вызывается метод daemon: : draw p -> monster: : draw(1, 1, 1, 1); /* Обход механизма виртуальных методов*/
Класс, содержащий хотя бы один чисто виртуальный метод, называется абстрактным. Абстрактные классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс может использоваться только в качестве базового для других классов - объекты абстрактного класса создавать нельзя, поскольку прямой или косвенный вызов чисто виртуального метода приводит к ошибке при выполнении.
ЯиМП_Лекция2_С++_ООП_наследование_полиморфизм.ppt