Иллюстрированный самоучитель по введению в экспертные системы


Множественное наследование в C++ - часть 2


Единственная тонкость в реализации этого механизма в C++ состоит в использовании квалификаторов наследования public и private. Если не вдаваться в подробности, то наследование вида public представляет собой отношение "is а" (является), которое мы использовали при обсуждении фреймов. Наследование вида private ближе к отношению "реализовано в терминах", которое позволяет скрыть определенные детали реализации интерфейсов объектов. Такое полезное разделение "выпало" в языке CLOS, в котором каждое отношение "класс-подкласс" несет семантический смысл.

Но если обратиться к множественному наследованию, то механизмы его реализации в C++ и CLOS существенно отличаются. Поскольку в языке C++ не существует такого понятия, как порядок предшествования классов, то даже такой простой случай, как в рассмотренном выше примере "Алмаз Никсона", приводит к неоднозначности. Будем считать, что отношения между классами Person, Quaker, Republican и Republican_Quaker, как и прежде, имеют вид, представленный на рис. 7.8.

Объявление классов Person, Quaker, Republican и Republican Quaker на языке C++ показано в листинге 7.2 (программный код объявления включен в файл nixon.h).

Рис. 7.8. Отношения между классами в примере "Алмаз Никсона"

Листинг 7.2. Файл nixon.h. Объявление классов, версия 1

// Объявление классов для задачи "Алмаз Никсона" finclude <iostream.h>

class Person

{ public:

Personf) {};

virtual "Person() {};

virtual void speak() = 0; };

class Republican : public Person

{ public:

Republican)) {};

virtual ~Republican)) {};

virtual void speak() { cout « "War";} };

class Quaker : public Person

{ public:

Quakerf) {};

virtual ~Quaker)) {};

virtual void speak)) { cout « "Peace";} };

class Republican_Quaker : public Republican,

public Quaker

{ public:

Republican_Quaker() {};

virtual ~Republican_Quaker() {};

};

Создадим экземпляр richard класса Republican_Quaker.



Начало  Назад  Вперед



Книжный магазин