Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Абстрактые классы, виртуальные методы. Наследование и замещение методов.

Читайте также:
  1. I. Наследование доли в уставном капитале общества с ограниченной ответственностью
  2. Билет №20. Аллельные гены. Наследование признаков при взаимодействии аллельных генов. Примеры. Множественный аллелизм. Механизм возникновения.
  3. Билет №21. Неаллельные гены. Наследование признаков при взаимодействии неаллельных генов. Примеры.
  4. Виртуальные базовые классы.
  5. Виртуальные организации
  6. Вопрос 21. Разновидности методов экспертной оценки: метод комиссий, метод Дельфи, «мозгового штурма». Достоинства и недостатки методов.

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объем и наименьшее содержание.

В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, Delphi), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов (например, Java), именно для запрещения создания экземпляров. Абстрактный класс можно рассматривать в качестве интерфейса к семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь определённые методы, а также свойства.

Абстрактные методы часто являются и виртуальными, в связи с чем понятия «абстрактный» и «виртуальный» иногда путают.

На языке программирования C++ абстрактный класс объявляется включением хотя бы одной чистой виртуальной функции, типа virtual _сигнатура_функции_ =0;, которая как и другие может быть заменена. Пример на языке программирования C++:

(НАЧАЛО) #include <iostream> class CA { // Абстрактный класс public: CA (void) { std::cout << "This object of the class "; } virtual void Abstr (void) = 0; // Чистая (пустая) виртуальная функция. void fun (void) { std::cout << "Реализация не будет наследоваться!"; } ~CA () { std::cout << "." << std::endl; } //Вызывается в обр. порядке конструкторов }; class CB: public CA { public: CB (void) { std::cout << "CB;"; } void Abstr (void){ std::cout << " call function cb.Abstr();"; } //Подменяющая функция.   (ПРОДОЛЖЕНИЕ) void fun (void){ std::cout << " call function cb.fun()"; } ~CB () {} // Неверно для абстр. кл. ~CB(){ ~CA(); } }; class CC: public CA { public: CC (void) { std::cout << "CC;"; } void Abstr (void) { std::cout << " call function cc.Abstr();"; } //Подменяющая функция. void fun (void) { std::cout << " call function cc.fun()"; } ~CC () {} // Неверно для абстр. кл. ~CC(){ ~CA(); } }; int main () { std::cout << "Program:" << std::endl; CB cb; cb.Abstr(); cb.fun(); cb.~CB(); CC cc; cc.Abstr(); cc.fun(); cc.~CC(); return 0; }

Дата добавления: 2015-07-15; просмотров: 305 | Нарушение авторских прав


Читайте в этой же книге: История ОПП | Основные идеи ОПП | Вопрос 9. Понятие об ООП. Основные принципы и идеи ООП. | Разделение массива | Сбалансированные деревья | Многоключевые деревья | Матрица смежности | Основы алгоритмов криптографии. | Программная документация. | Генерация кода |
<== предыдущая страница | следующая страница ==>
Понятие полиморфизма. Использование в языке.| Параметризация типов данных в классах и функциях.

mybiblioteka.su - 2015-2024 год. (0.005 сек.)