Мы знаем, что мы можем решить проблему алмаза, используя виртуальное наследование.Как компилятор решает проблему алмаза в C++?
Например:
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();
}
При компиляции этого кода мы получим ошибку неоднозначности. Теперь мой вопрос заключается в том, как компилятор внутренне обнаруживает эту проблему двусмысленности (проблема с алмазами).
Обратите внимание: вы не используете виртуальное наследование в своем коде. Ваше описание, похоже, подразумевает, что пример касается решения проблемы алмаза с использованием виртуального наследования. –
Я проголосовал за вас только потому, что «Лигер» заставил меня посмеяться :-) – selalerer
Я всегда думал, что проблема с алмазом печатала алмаз на экран определенного размера ... взял меня на минуту, когда вы имели в виду конфликт наследования ... – corsiKa