Виртуальные функции при виртуальном наследовании
От: Андрей Е  
Дата: 18.08.11 07:29
Оценка:
Есть замечательная статья про виртуальное наследование. Но к сожалению, почему-то в этой статье не описывается, что происходит с виртуальными функциями при виртуальном наследовании.

Допустим есть такая иерархия классов:
class A
{
    int a;
public:
    virtual void foo(){ std::cout << "A";};
};
 
class B1 : virtual public A
{ 
    int b1;
public:
    virtual void foo(){ std::cout << "B1";};
};
 
class B2 : virtual public A
{
    int b2;
public:
    virtual void foo(){ std::cout << "B2";};
};
class C : public B1, public B2
{
    int c;
};

Допустим где-то в коде встречается такое место:
A* a = new C;
a->foo();

Какая функция будет вызвана в этом случае?
Почему будет вызвана именно она? Можно ли это объяснить в терминах указателей на на таблицы виртуальных функций, как в приведенной статье?
виртуальное наследование
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.