Составители:
Рубрика:
68
вертикали и горизонтали, как ладья). Поэтому класс Queen объявлен потомком
двух классов: Castle и Bishop. Таким образом, имеется иерархия классов,
изображенная на рис.10.
Приведенный пример реализации класса Queen содержит ошибку. Дело в том,
что для класса Queen дублируются компонентные данные vert, hor и color, в то
время как у реального ферзя всего одна позиция
на доске и один цвет. Таким
образом, встала задача предотвратить дублирование компонент непрямого
базового класса в производном. Решить эту проблему можно, объявив класс
Figure виртуальным.
Для того, чтобы определить непрямой базовый класс виртуальным,
необходимо при объявлении этого класса базовым в списке порождения указать
ключевое слово virtual. Спецификатор virtual способствует минимизации
структуры
производного класса. Главная особенность виртуальных базовых
классов - они не тиражируются. Изменим определение классов шахматных фигур.
class Figure {…};
class Castle: public virtual Figure {…};
class Bishop: public virtual Figure {…};
class Castle: public Castle, public Bishop{…};
Теперь схема иерархии классов выглядит так, как показано на рис.11, и
компонентные данные vert, hor, color не будут дублироваться в объектах класса
Queen.
Figure
Вishop
Queen
Рисунок 11. - При использовании виртуальных классов схема иерархии классов
принимает ромбовидную форму
Castle
вертикали и горизонтали, как ладья). Поэтому класс Queen объявлен потомком двух классов: Castle и Bishop. Таким образом, имеется иерархия классов, изображенная на рис.10. Приведенный пример реализации класса Queen содержит ошибку. Дело в том, что для класса Queen дублируются компонентные данные vert, hor и color, в то время как у реального ферзя всего одна позиция на доске и один цвет. Таким образом, встала задача предотвратить дублирование компонент непрямого базового класса в производном. Решить эту проблему можно, объявив класс Figure виртуальным. Для того, чтобы определить непрямой базовый класс виртуальным, необходимо при объявлении этого класса базовым в списке порождения указать ключевое слово virtual. Спецификатор virtual способствует минимизации структуры производного класса. Главная особенность виртуальных базовых классов - они не тиражируются. Изменим определение классов шахматных фигур. class Figure {…}; class Castle: public virtual Figure {…}; class Bishop: public virtual Figure {…}; class Castle: public Castle, public Bishop{…}; Теперь схема иерархии классов выглядит так, как показано на рис.11, и компонентные данные vert, hor, color не будут дублироваться в объектах класса Queen. Figure Вishop Castle Queen Рисунок 11. - При использовании виртуальных классов схема иерархии классов принимает ромбовидную форму 68
Страницы
- « первая
- ‹ предыдущая
- …
- 66
- 67
- 68
- 69
- 70
- …
- следующая ›
- последняя »