Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Реально в конкретных задачах вызываются лишь функции производных классов. “Исходная” виртуальная функция базового класса часто нужна только для того, чтобы в производных классах было, что замещать.
Содержимое базовой функции в этом случае не имеет значения и может быть пустым.
class A {
public:
virtual void Func () { }
};
Это удобно если функция ничего не возвращает. Необходимо, чтобы все замещающие функции, а также базовая функция, имели и имя, и сигнатуру, и тип возвращаемого результата одинаковыми.
Если функции должны, что-либо возвращать, то базовая функция уже не может быть пустой. Она может возвращать произвольное значение, напр., 0:
virtual int Func () { return 0;}
Однако можно объявить в базовом классе чистую виртуальную функцию, для чего достаточно приравнять прототип этой функции нулю:
virtual int Func (int, char*) =0;
Это абстракция и такую функцию обязательно надо замещать в производных класса, в которых она и наполнится разумным содержанием.
Объявление такой функции в базовом классе носит формальный характер для указания на виртуальность функций с данным именем.
Класс, в котором есть хоть одна чистая виртуальная функция, называется абстрактным классом.
Свойства абстрактного класса:
- Невозможно создать самостоятельных объектов абстрактного класса.
- Абстрактный класс может использоваться только в качестве базового класса для производных классов.
- Если в производном классе от абстрактного базового класса происходит замещение чистой виртуальной функции, то производный класс не является абстрактным.
Если замещение не производится, то производный класс также является абстрактным.
Class A { // абстрактный класс
public:
virtual int Func (char*) =0;
Дата публикования: 2014-11-28; Прочитано: 484 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!