Компилятор создает таблицы, в которых перечислены все члены каждого класса, а также содержит ссылки, позволяющие ему перемещаться вверх и вниз по цепочке наследования для любого класса.
Когда необходимо найти переменную-член (вес в вашем примере) компилятор начинается с фактического класса, в вашем случае Liger.Там он не найдет весового члена, поэтому он переместится на один уровень вверх к родительскому классу (ам).В этом случае их два, поэтому он сканирует как Тигра, так и Льва на предмет веса имени.Хитов по-прежнему нет, поэтому теперь ему нужно подняться еще на один уровень, но нужно сделать это дважды, по одному разу для каждого класса на этом уровне.Это продолжается до тех пор, пока требуемый член не будет найден на некотором уровне дерева наследования.Если на каком-либо заданном уровне он находит только одного члена, учитывая все множественные ветви наследования, все хорошо, если он находит двух или более членов с требуемым именем, он не может решить, какой из них выбрать, поэтому он ошибается.