Правило 35: Рассмотрите альтернативы виртуальным функциям
Правило 35: Рассмотрите альтернативы виртуальным функциям
Предположим, что вы работаете над видеоигрой и проектируете иерархию игровых персонажей. В вашей игре будут использоваться разные варианты сражений, персонажи могут подвергаться ранениям или иначе терять жизненные силы. Поэтому вы решаете включить в класс функцию-член healthValue, которая возвращает целочисленное значение, показывающее, сколько жизненных сил осталось у персонажа. Поскольку разные персонажи могут вычислять свою жизненную силу по-разному, то представляется естественным объявить функцию healthValue следующим образом:
class GameCharacter {
public:
virtual void healthValue() const; // возвращает жизненную силу персонажа
... // в производных классах можно
}; // переопределить
Тот факт, что healthValue не объявлена как чисто виртуальная, наводит на мысль, что существует алгоритм вычисления жизненной силы по умолчанию (см. правило 34).
Это очевидный подход к проектированию, и в каком-то смысле в очевидности и заключается его слабость. Поскольку решение кажется совершенно естественным, не исключено, что вы забудете уделить должное внимание рассмотрению альтернатив. Чтобы помочь вам выбраться из колеи, рассмотрим некоторые другие подходы к проблеме.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Альтернативы DNS
Альтернативы DNS Можно получить информацию об имени и адресе без использования DNS. Типичной альтернативой служат статические файлы со списком узлов (обычно файл /etc/hosts, как мы указываем в табл. 11.2), информационная система сети (Network Information System, NIS) и упрощенный протокол службы
30.2. Альтернативы для клиента TCP
30.2. Альтернативы для клиента TCP Мы уже обсуждали различные способы устройства клиентов, но стоит тем не менее еще раз обратить внимание на относительные достоинства и недостатки этих способов.1. В листинге 5.4 показан основной способ устройства клиента TCP. С этой
18.6. О некоторых особенностях работы с виртуальным компьютером
18.6. О некоторых особенностях работы с виртуальным компьютером 18.6.1 Копирование и вставка Если на виртуальной машине установлен пакет VMware Tools, имеется возможность осуществлять операции копирования и вставки между приложениями, запущенными в виртуальной машине и на
Альтернативы ICQ
Альтернативы ICQ Популярность интернет-пейджеров привела к возникновению целого ряда других клиентских программ. Официальный клиент ICQ от Mirabilis претерпел за время своего существования значительные изменения. Этот программный продукт уверенно двигался, если можно так
Всплывающее меню или доступ ко всем функциям Skype
Всплывающее меню или доступ ко всем функциям Skype Мы уже познакомились с основными возможностями Skype — это голосовое общение и чат. Однако в программе имеются и другие полезные функции, доступ к которым организован через всплывающее меню, которое можно вызвать из любого
Повышение цен – альтернативы
Повышение цен – альтернативы Никаких альтернатив! И вот почему. Мало кто из интернет-бизнесменов Рунета верит в действенность высоких цен. Большинство владельцев очень боятся встать на путь их повышения и никогда этого не делали.На самом деле покупатели
Группировка по встроенным функциям и UDF
Группировка по встроенным функциям и UDF Разрешена группировка и использование встроенных функций и UDF.Пример:select sum(vent) from sales group by extract(year from sale
R.11.6 Доступ к виртуальным функциям
R.11.6 Доступ к виртуальным функциям Правила доступа (§R.11) к виртуальной функции определяются ее описанием и на них не влияют правила доступа к к функции, которая позднее будет подавлять ее. Приведем пример:class B {public: virtual f();};class D: public B {private: f();};void f(){ D d; B* pb = &d; D* pd =
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса Возьмем класс для представления Web-браузера. В числе прочих такой класс может предлагать функции, который очищают кэш загруженных элементов, очищают историю посещенных URL и
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами
Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами Многие программисты STL, столкнувшись с необходимостью структуры данных с быстрым поиском, немедленно выбирают стандартные ассоциативные контейнеры set, multiset, map и multimap. В этом
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе
Совет 29. Рассмотрите возможность использования istreambuf_iterator при посимвольном вводе Предположим, вы хотите скопировать текстовый файл в объект string. На первый взгляд следующее решение выглядит вполне разумно:ifstream inputFile("interestringData.txt");string fileData(istream_iterator<char>(inputFile)), //
ПЕРЕДАЧА ИНФОРМАЦИИ О СТРУКТУРАХ ФУНКЦИЯМ
ПЕРЕДАЧА ИНФОРМАЦИИ О СТРУКТУРАХ ФУНКЦИЯМ Вспомним, что аргументы функции передают значения в функцию. Каждое значение является либо числом типа int или float, либо ASCII-кодом или адресом. Структура гораздо сложнее, чем отдельная переменная, поэтому неудивительно, что саму
Глава 1 Знакомство с виртуальным миром в 3ds Max
Глава 1 Знакомство с виртуальным миром в 3ds Max Материалы данной главы посвящены основам работы с программой 3ds Max и предназначены в основном для начинающих пользователей. Рассмотрим лишь некоторые свойства и особенности виртуального пространства, изучим общий порядок
ТЕХНОЛОГИИ: Борцы с виртуальным изобилием
ТЕХНОЛОГИИ: Борцы с виртуальным изобилием Авторы: Сергей Вильянов, Родион НасакинС окончанием эпохи тотального дефицита вдруг обнаружилось, что даже в условиях не менее тотального изобилия сделать удачную покупку совсем не просто — как в Интернете, так и за его
Народные альтернативы
Народные альтернативы Автор: Киви БердСексуальные преступники-педофилы наряду с международным терроризмом уже давно выступают в качестве главного жупела, которым власти пугают обывателей и оправдывают всякое новое ограничение прав и свобод в Интернете. Но хотя
Альтернативы частичным функциям
Альтернативы частичным функциям Один из технических приемов, используемый в этой лекции, мог вызвать удивление, - применение частичных функций. Он связан с неустранимой проблемой применения в некоторой спецификации не всюду определенных операций. Но являются ли