Compartilhar via


Várias classes base

Conforme o descrito em Várias heranças, uma classe pode ser derivada de mais de uma classe base. Em um modelo de várias heranças (no qual as classes são derivadas de mais de uma classe base), as classes base são especificadas usando o elemento de gramática lista base (consulte a seção sobre Gramática em Visão geral). Por exemplo, a declaração de classe de CollectionOfBook, derivada de Collection e de Book, pode ser especificada:

// deriv_MultipleBaseClasses.cpp
// compile with: /LD
class Collection {
};
class Book {};
class CollectionOfBook : public Book, public Collection {
    // New members
};

A ordem na qual as classes base são especificadas não é significativa, exceto em determinados casos nos quais os construtores e os destruidores são invocados. Nesses casos, a ordem na qual as classes base são especificadas afeta o seguinte:

  • A ordem na qual ocorre a inicialização pelo construtor. Se seu código depende da parte Book de CollectionOfBook para ser inicializado antes da parte Collection, a ordem de especificação é significante. A inicialização ocorre na ordem em que as classes são especificadas na lista base.

  • A ordem na qual os destruidores são chamados para limpeza. Novamente, se for necessário que uma "parte" específica da classe esteja presente quando outra parte for destruída, a ordem é importante. Os destruidores são chamados na ordem inversa das classes especificadas na lista base.

    Dica

    A ordem de especificação das classes base pode afetar o layout de memória da classe.Não tome decisões de programação com base na ordem dos membros base na memória.

Ao especificar a lista base, você não pode especificar o mesmo nome de classe mais de uma vez. No entanto, uma classe pode ser uma base indireta para uma classe derivada mais de uma vez.

Consulte também

Referência

Classes derivadas