Нет, потому что у вас есть два базовых класса без знания друг друга.
Italk Parent
/ \ / \
| |
+---------+
|
Child
Если бы Parent и Italk имели две переменные с именем i, было бы два экземпляра "i", ITalk :: i и Parent :: i.Чтобы получить к ним доступ, вам нужно полностью указать, какой из них вы хотите.
То же самое относится и к методам, в lChild есть два метода с именем SayHi, и вам необходимо уточнить, какой из них вы имеете в виду при вызове SayHi, поскольку множественное наследованиесделал это неоднозначным.
У вас есть SayHi Родителя
lChild->Parent::SayHi();
и SayHi Италка:
lChild->ITalk::SayHi();
Последний является чисто виртуальным, и его абстракция должна быть переопределена локально в Child.Для этого вам нужно определить
Child::SayHi();
, который теперь будет скрывать Parent :: SayHi () при вызове SayHi, не ограничивая его классом:
lChild->SayHi() //parent's now hidden, invoke child's
Конечно Child:: SayHi () может вызвать Parent :: SayHi ():
void Child::SayHi()
{
Parent::SayHi();
}
, что решит вашу проблему.