Поделиться через


Несколько базовых классов

Как описано в разделе Множественное наследование, класс может быть производным нескольких базовых классов. В модели множественного наследования (где классы являются производными нескольких базовых классов) базовые классы задаются с помощью элемента грамматики 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, порядок указания важен. Инициализация выполняется в том порядке, в котором классы указаны в базовом-списке.

  • Порядок, в котором вызываются деструкторы для очистки. Опять же, если определенная часть класса должна присутствовать, а другая часть должна быть удалена, порядок имеет значение. Деструкторы вызываются в порядке, обратном указанию классов в базовый-список.

    Примечание

    Порядок указания базовых классов может повлиять на структуру памяти класса.Не принимайте никаких программных решений на основе порядка базовых членов в памяти.

При определении базового-списка невозможно задать одно и то же имя класса несколько раз. Однако класс может стать косвенным базовым классом производного класса несколько раз.

См. также

Ссылки

Производные классы