Jaký je rozdíl mezi vícenásobnou a víceúrovňovou dědičností v C ++?


Odpověď 1:

Vícenásobná dědičnost v C ++ používá mnoho různých objektů jako stavební bloky pro objekt. Je to jako kombinovat třídu zbraní a třídu nožů a vytvořit třídu zbraní. Víceúrovňová dědičnost je objekt, který také dědí vlastnosti ze základních tříd své základní třídy. Například jak druh zdědí vlastnost od svého rodu až po své království.


Odpověď 2:

Je to docela jednoduché.

Při vícenásobném dědictví je jedna třída odvozena od více než jedné základní třídy.

Ve víceúrovňové dědičnosti je třída odvozena od základní třídy, která sama je odvozena od další základní třídy.

Vícenásobné dědictví:

třída Base1 {...};
třída Base2 {...};
třída Odvozeno: public Base1, Base2 {...};

Víceúrovňové dědictví:

třída Base {...};
třída Derived1: public Base {...};
třída Derived2: public Derived1 {...};

Více tříd můžete použít, pokud třída implementuje více rozhraní:

// Rozhraní:
class DrawingSurface {/ * popis rozhraní * /};
třída Shreddable {/ * popis rozhraní * /};

// Každé z těchto implementuje pouze jedno z rozhraní:
třída Whiteboard: public DrawingSurface {...};
třída Mrkev: veřejné Shreddable {...};

// Toto implementuje oba:
třída Papír: public DrawingSurface, Shreddable {...};

Pro další specializaci třídy můžete použít víceúrovňové dědictví:

třída Animal {...};

// Feliny jsou zvířata.
třída Feline: public Animal {...};

// Jsou to druhy kočkovitých šelem, které jsou tranzitivně také zvířaty:
třída HouseCat: public Feline {...};
třída Tiger: public Feline {...};
třída Lion: public Feline {...};

Odpověď 3:

Je to docela jednoduché.

Při vícenásobném dědictví je jedna třída odvozena od více než jedné základní třídy.

Ve víceúrovňové dědičnosti je třída odvozena od základní třídy, která sama je odvozena od další základní třídy.

Vícenásobné dědictví:

třída Base1 {...};
třída Base2 {...};
třída Odvozeno: public Base1, Base2 {...};

Víceúrovňové dědictví:

třída Base {...};
třída Derived1: public Base {...};
třída Derived2: public Derived1 {...};

Více tříd můžete použít, pokud třída implementuje více rozhraní:

// Rozhraní:
class DrawingSurface {/ * popis rozhraní * /};
třída Shreddable {/ * popis rozhraní * /};

// Každé z těchto implementuje pouze jedno z rozhraní:
třída Whiteboard: public DrawingSurface {...};
třída Mrkev: veřejné Shreddable {...};

// Toto implementuje oba:
třída Papír: public DrawingSurface, Shreddable {...};

Pro další specializaci třídy můžete použít víceúrovňové dědictví:

třída Animal {...};

// Feliny jsou zvířata.
třída Feline: public Animal {...};

// Jsou to druhy kočkovitých šelem, které jsou tranzitivně také zvířaty:
třída HouseCat: public Feline {...};
třída Tiger: public Feline {...};
třída Lion: public Feline {...};