C++ Eredità multipla


Esempio

Oltre all'eredità singola:

class A {};
class B : public A {};

Puoi anche avere ereditarietà multipla:

class A {};
class B {};
class C : public A, public B {};

C ora erediterà da A e B allo stesso tempo.

Nota: questo può portare ad ambiguità se gli stessi nomi sono usati in più class ereditate o struct . Stai attento!

Ambiguità nell'ereditarietà multipla

L'ereditarietà multipla può essere utile in alcuni casi ma, a volte, tipo strano di incontri problematici durante l'utilizzo dell'ereditarietà multipla.

Ad esempio: due classi base hanno funzioni con lo stesso nome che non sono sovrascritte nella classe derivata e se si scrive codice per accedere a quella funzione utilizzando l'oggetto della classe derivata, il compilatore mostra errore perché, non può determinare quale funzione chiamare. Ecco un codice per questo tipo di ambiguità in ereditarietà multipla.

class base1
{
  public:
     void funtion( )
     { //code for base1 function }  
};
class base2
{
    void function( )
     { // code for base2 function } 
};

class derived : public base1, public base2
{
    
};

int main()
{
    derived obj;
    
  // Error because compiler can't figure out which function to call 
  //either function( ) of base1 or base2 .   
    obj.function( )  
}

Ma questo problema può essere risolto usando la funzione di risoluzione dello scope per specificare quale funzione classificare sia base1 o base2:

int main()
{
    obj.base1::function( );  // Function of class base1 is called. 
    obj.base2::function( );  // Function of class base2 is called.
}