Чтение онлайн

на главную - закладки

Жанры

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

Либерти Джесс

Шрифт:

Далее в программе все три функции базового класса замешаются в производных классах Circle и Rectangle, но одна из них — функция Draw — выполняется как чистая виртуальная функция, поскольку в объявлении замещенного варианта функции в производных классах есть вызов исходной функции из базового класса. В результате выполнение этой функции в обоих производных классах приводит к выведению на экран одного и того же сообщения.

Сложная

иерархия абстракций

Иногда бывает необходимо произвести один класс ADT от другого класса ADT, например для того, чтобы в производном классе ADT преобразовать в обычные методы часть функций, объявленных в базовом классе как чистые виртуальные, оставив при этом другие функции чистыми.

Так, в классе Animal можно объявить методы Eat, Sleep, Move и Reproduce как чистые виртуальные функции. Затем от класса Animal производятся классы Mammal и Fish.

Исходя из соображения, что все млекопитающие размножаются практически одинаково, имеет смысл в классе Mammal преобразовать метод Reproduce в обычный, оставив при этом методы Eat, Sleep и Move чистыми виртуальными функциями.

Затем от класса Mammal производится класс Dog, в котором необходимо заместить все три оставшиеся чистые виртуальные функции, чтобы получить возможность создавать объекты класса Dog.

Таким образом, наследование одного класса ADT от другого класса ADT позволяет объявлять общие методы для всех следующих производных классов, чтобы не замещать потом эти функции по отдельности в каждом производном классе.

В листинге 13.10 показан базовый костяк программы, в котором используется объявленный выше подход.

Листинг 13.10. Наследование класса ADT от другого класса ADT

1: // Листинг 13.10.

2: // Deriving ADTs from other ADTs

3: #include <iostream.h>

4:

5: enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown };

6:

7: class Animal // Общий базовый класс для классов Mammal и Fish

8: {

9: public:

10: Animal(int);

11: virtual ~Animal { cout << "Animal destructor...\n"; }

12: virtual int GetAge const { return itsAge; }

13: virtual void SetAge(int age) { itsAge = age; }

14: virtual void Sleep const = 0;

15: virtual void Eat const = 0;

16: virtual void Reproduce const = 0;

17: virtual void Move const = 0;

18: virtual void Speak const = 0;

19: private:

20: int itsAge;

21: };

22:

23: Animal::Animal(int age):

24: itsAge(age)

25: {

26: cout << "Animal constructor...\n";

27: }

28:

29: class Mammal : public Animal

30: {

31: public:

32: Mammal(int age):Animal(age)

33: { cout << "Mammal constructor...\n";}

34: virtual ~Mammal { cout << "Mammal destructor...\n";}

35: virtual void Reproduce const

36: { cout << "Mammal reproduction depicted...\n"; }

37: };

38:

39: class Fish : public Animal

40: {

41: public:

42: Fish(int age):Animal(age)

43: { cout << "Fish constructor...\n";}

44: virtual ~Fish { cout << "Fish destructor...\n"; }

45: virtual void Sleep const { cout << "fish snoring...\n"; }

46: virtual void Eat const { cout << "fish feeding...\n"; }

47: virtual void Reproduce const

48: { cout << "fish laying eggs...\n"; }

49: virtual void Move const

50: { cout << "fish swimming...\n"; }

51: virtual void Speak const { }

52: };

53:

54: class Horse : public Mammal

55: {

56: public:

57: Horse(int age, COLOR color ):

58: Mamrnal(age), itsColor(color)

59: { cout << "Horse constructor...\n"; }

60: virtual ~Horse { cout << "Horse destructor...\n"; }

61: virtual void Speakconst { cout << "Whinny!... \n"; }

62: virtual COLOR GetItsColor const { return itsColor; }

63: virtual void Sleep const

64: { cout << "Horse snoring.,.\n"; }

65: virtual void Eat const { cout << "Horse feeding...\n"; }

66: virtual void Move const { cout << "Horse running...\n";} 67:

68: protected:

69: COLOR itsColor;

70: };

71:

72: class Dog : public Mammal

73: {

74: public:

75: Dog(int age, COLOR color ):

76: Mammal(age), itsColor(color)

77: { cout << "Dog constructor...\n"; }

78: virtual ~Dog { cout << "Dog destructor...\n"; }

79: virtual void Speakconst { cout << "Woof!... \n"; }

80: virtual void 51eep const { cout << "Dog snoring...\n"; }

81: virtual void Eat const { cout << "0og eating...\n"; }

82: virtual void Move const { cout << "Dog running...\n"; }

83: virtual void Reproduce const

84: { cout << "Dogs reproducing...\n"; }

Поделиться:
Популярные книги

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Барон Дубов 2

Карелин Сергей Витальевич
2. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 2

Хозяйка покинутой усадьбы

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка покинутой усадьбы

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Город воров. Дороги Империи

Муравьёв Константин Николаевич
7. Пожиратель
Фантастика:
боевая фантастика
5.43
рейтинг книги
Город воров. Дороги Империи

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Хозяйка усадьбы, или Графиня поневоле

Рамис Кира
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Хозяйка усадьбы, или Графиня поневоле

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Барин-Шабарин

Гуров Валерий Александрович
1. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Барин-Шабарин