Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы
Скачать 1.76 Mb.
|
Виртуальные методыРекомендуется делать виртуальными деструкторыдля того, чтобы гарантировать правильное освобождение памяти из-под динамического объекта, поскольку в этом случае в любой момент времени будет выбран деструктор, соответствующий фактическому типу объекта. Четкого правила, по которому метод следует делать виртуальным, не существует. Можно дать рекомендацию объявлять виртуальными методы, для которых есть вероятность, что они будут переопределены в производных классах. Методы, 1) которые во всей иерархии останутся неизменными 2) которыми производные классы пользоваться не будут, делать виртуальными нет смысла. С другой стороны, при проектировании иерархии не всегда можно предсказать, каким образом будут расширяться базовые классы, а объявление метода виртуальным обеспечивает гибкость и возможность расширения. Виртуальный механизм работает только при использовании указателей или ссылок на объекты. Объект, определенный через указатель или ссылку и содержащий виртуальные методы, называется полиморфным.
Виртуальные методыАбстрактные классы Абстрактным классом называется класс, в котором есть хотя бы одна чистая виртуальная функция. Чистой виртуальной функцией называется функция, которая имеет определение: virtual тип имя_функции (список_формальных_параметров) = 0; Чисто виртуальный метод должен переопределяться в производном классе (возможно опять как чисто виртуальный). Класс, содержащий хотя бы один чисто виртуальный метод, называется абстрактным. Абстрактные классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс может использоваться только в качестве базового для других классов. Объекты абстрактного класса создавать нельзя При определении абстрактного класса необходимо иметь в виду следующее:
допускается объявлять указатели и ссылки на абстрактный класс, если при инициализации не требуется создавать временный объект; если класс, производный от абстрактного, не определяет все чисто виртуальные функции, он также является абстрактным. Виртуальные методыКлючи доступа при наследовании При описании класса в его заголовке перечисляются все классы, являющиеся для него базовыми. Возможность обращения к элементам этих классов регулируется с помощью ключей доступа private, protected и public:
{тело класса}; Если базовых классов несколько, они перечисляются через запятую. Ключ доступа может стоять перед каждым классом. class A {...}; class В {...}; class С {...}; class D: A, protected В, public С { ... }; По умолчанию для классов используется ключ доступа private, а для структур — publiс. Кроме этого, доступность в производном классе регулируется ключом доступа к базовому классу. Этот ключ указывается в объявлении производного класса и определяет вид наследования: public, private или protected. Виртуальные методыОткрытое наследование сохраняет статус доступа для всех элементов базового класса Защищенное – понижает статус доступа всех элементов базового класса со статусом public до protected Закрытое – понижает статусы доступа всех элементов базового класса со статусом public и protected до private. Производные классы наследуют элементы базового класса person, но некоторые функции будут выполняться в каждом классе по-своему. Например, функция show() будет для каждого класса выводить его собственные поля. Для вызова метода предка из потомка используется операция доступа к области видимости "::". Виртуальные методыМножественное наследование Множественное наследование означает, что класс имеет несколько базовых классов. Если в базовых классах есть одноименные методы, то может произойти конфликт идентификаторов, который устраняется при помощи операции доступа к области видимости ::. В иерархию, представленную на рис. 12, добавим класс employee_student (сотрудники, которые учатся). class employee_student: public employee, public student {...}; employee_student A; cout< |