Sappiamo che possiamo risolvere il problema dei diamanti usando l'ereditarietà virtuale.In che modo il compilatore risolve internamente il problema dei diamanti in C++?
Ad esempio:
class Animal // base class
{
int weight;
public:
int getWeight() { return weight;};
};
class Tiger : public Animal { /* ... */ };
class Lion : public Animal { /* ... */ };
class Liger : public Tiger, public Lion { /* ... */ };
int main()
{
Liger lg ;
/*COMPILE ERROR, the code below will not get past
any C++ compiler */
int weight = lg.getWeight();
}
Quando compiliamo questo codice otterremo un errore di ambiguità. Ora la mia domanda è come il compilatore rileva internamente questo problema di ambiguità (problema dei diamanti).
Nota che non si utilizza l'ereditarietà virtuale nel codice. La tua descrizione sembra implicare che l'esempio riguarda la soluzione del problema dei diamanti usando l'ereditarietà virtuale. –
Ho votato solo perché il "Liger" mi ha fatto ridere :-) – selalerer
Ho sempre pensato che il problema del diamante fosse la stampa di un diamante sullo schermo di una determinata dimensione ... mi ci volle un minuto per intendere conflitto di ereditarietà ... – corsiKa