Мы знаем, что проблему алмаза можно решить с помощью виртуального наследования.
Например:
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();
}
При компиляции данного кода мы получим ошибку неоднозначности. Теперь мой вопрос в том, как компилятор внутренне обнаруживает эту проблему неоднозначности (проблема алмаза).