ВУЗ:
Составители:
Рубрика:
117
double figure::area {return 0;}
Eсли бы тип возвращаемого значения у функции был void (напри-
мер, при рисовании фигуры void show ( )), можно было бы написать:
void figure::show () {}
В обоих случаях эти функции фиктивны. Такого рода виртуаль-
ные функции можно было бы использовать для контроля ошибок, свя-
занных с созданием объектов типа figure:
double figure::area () {
cout <<”Ошибка: попытка вычислить площадь ”;
cout <<”несуществующего объекта!\n”;
exit (1); return 1;
}
В С++ существует более удобный и надежный способ. Версия
виртуальной функции, которая, с одной стороны, должна быть опреде-
лена, а с другой, никогда не должна использоваться, может быть
объявлена как чисто виртуальная функция:
class figure {. . .
virtual double area () = 0;
};
В классах, производных от figure, при наличии своей версии вир-
туальной функции area () она должна либо быть определена, либо, в
свою очередь, объявлена как чисто виртуальная функция. Во время вы-
полнения программы при обращении к чисто виртуальной функции вы-
дается сообщение об ошибке и программа аварийно завершается. Класс,
содержащий хотя бы одну чисто виртуальную функцию, называется аб-
страктным классом. Запрещено создание объектов таких классов. Это
позволяет установить контроль со стороны компилятора за ошибочным
созданием объектов фиктивных типов, подобных figure. Заметим, что
можно создавать указатели и ссылки на абстрактные классы.
21. Переопределение стандартных операций
21.1. Основные определения и свойства
В С++ есть возможность распространения действия стандартных
операций на операнды абстрактных типов данных.
Страницы
- « первая
- ‹ предыдущая
- …
- 113
- 114
- 115
- 116
- 117
- …
- следующая ›
- последняя »
