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