Читаем Освой самостоятельно С++ за 21 день. полностью

Для решения возникшей проблемы можно использовать несколько подходов. Haпример, можно переименовать слишком "лошадиный" метод Gallop в более обтекаемый Move, после чего заместить этот метод в объекте Pegasus таким образом, чтобы он выполнял функцию метода Fly. В других объектах класса Horse метод Move будет выполняться так же, как раньше выполнялся метод Gallop. Для объекта Pegasus можно даже определить, что короткие дистанции он должен преодолевать методом Gallop, а длинные — методом Fly:

Pegasus::Move(long distance)

{

   if (distance > veryFar)

      fly(distance);

   else

      gallop(distance);

}

Но и этот подход имеет ряд ограничений, поскольку объект уже не сможет летать на короткие дистанции и бегать на длинные. Может быть, все же просто перенести метод Fly в класс Horse, как показано в листинге 13.1? Проблема состоит в том, что лошади, в большинстве своем, летать не умеют, поэтому во всех объектах этого класса, за исключением объекта Pegasus, данный метод не должен ничего выполнять.

Листинг 13.1. Умеют ли лошади летать...  

1: // Листинг 13.1. Умеют ли лошади летать...

2: // Фильтрация метода Fly в классе Horse

3:

4: #include

5:

6: class Horse

7: {

8:    public:

9:       void Gallop{ cout << "Galloping...\n"; }

10:      virtual void Fly { cout << "Horses can't fly.\n"; }

11:   private:

12:      int itsAge;

13: };

14:

15: class Pegasus : public Horse

16: {

17:    public:

18:       virtual void Fly { cout << "I can fly! I can fly! I can fly!\n"; }

19: };

20:

21: const int NumberHorses = 5;

22: int main

23: {

24:    Horse* Ranch[NumberHorses];

25:    Horse* pHorse;

26:    int choice,i;

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT