Udostępnij za pośrednictwem


Wiele klas podstawowych

Zgodnie z opisem zamieszczonym w artykule Wielokrotne dziedziczenie, klasa może pochodzić z więcej niż jednej klasy podstawowej.W modelu dziedziczenia wielokrotnego (gdzie klasy pochodzą z więcej niż jednej klasy podstawowej), klasy podstawowe są określane za pomocą elementu gramatyki lista podstawowa (zobacz sekcję gramatyki w Przeglądzie).Na przykład, można określić deklarację klasy dla CollectionOfBook, pochodzącej z Collection i Book:

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

Kolejność, w której są określane klasy podstawowe nie ma znaczenia z wyjątkiem niektórych przypadków, gdy wywoływane są konstruktory i destruktory.W tych przypadkach, kolejność, w której są określane klasy podstawowe ma wpływ na:

  • Kolejność, w której ma miejsce inicjowanie przez konstruktor.Jeśli kod opiera się na tym, aby część Book kolekcji CollectionOfBook została zainicjowana przed częścią Collection, kolejność specyfikacji jest znacząca.Inicjowanie odbywa się w kolejności klas określonej w liście podstawowej.

  • Kolejność, w której wywoływane są destruktory, aby posprzątać.Ponownie, jeśli określona "część" klasy musi być obecna, kiedy niszczona jest inna część, kolejność ma znaczenie.Destruktory są wywoływane w odwrotnej kolejności klas do określonej na liście podstawowej.

    [!UWAGA]

    Kolejność specyfikacji klas podstawowych może wpływać na układ pamięci klasy.Nie należy podejmować żadnych decyzji programistycznych na podstawie kolejności elementów podstawowych w pamięci.

Podczas określania listy podstawowej, nie można podać tej samej nazwy klasy więcej niż jeden raz.Jednak możliwe jest, aby klasa mogła być pośrednią podstawą dla klasy pochodnej więcej niż raz.

Zobacz też

Informacje

Klasy pochodne