Несколько базовых классов
Как описано в разделе Множественное наследование, класс может быть производным нескольких базовых классов. В модели множественного наследования (где классы являются производными нескольких базовых классов) базовые классы задаются с помощью элемента грамматики base-list (см. подраздел "Грамматика" раздела Обзор). Например, объявление класса для CollectionOfBook, производного от Collection и Book, можно указать следующим образом.
// deriv_MultipleBaseClasses.cpp
// compile with: /LD
class Collection {
};
class Book {};
class CollectionOfBook : public Book, public Collection {
// New members
};
Порядок, в котором указываются базовые классы, не имеет значения, кроме некоторых случаев, когда вызываются конструкторы и деструкторы. В таких случаях порядок, в котором указываются базовые классы, влияет на следующее.
Порядок, в котором конструктор выполняет инициализацию. Если код основан на том, что инициализация части Book CollectionOfBook должна выполняться перед частью Collection, порядок указания важен. Инициализация выполняется в том порядке, в котором классы указаны в базовом-списке.
Порядок, в котором вызываются деструкторы для очистки. Опять же, если определенная часть класса должна присутствовать, а другая часть должна быть удалена, порядок имеет значение. Деструкторы вызываются в порядке, обратном указанию классов в базовый-список.
Примечание
Порядок указания базовых классов может повлиять на структуру памяти класса.Не принимайте никаких программных решений на основе порядка базовых членов в памяти.
При определении базового-списка невозможно задать одно и то же имя класса несколько раз. Однако класс может стать косвенным базовым классом производного класса несколько раз.