Почему следующий класс имеет виртуальную таблицу?

Предположим, что у меня есть ромбовидная ситуация с наследованием следующим образом:

class A{
    public: virtual void foo(){};
};
class B: public virtual A{
    public: virtual void foo(){};
};
class C: public virtual A{
    public: virtual void foo(){};
};
class D: B, C{};

Последняя строка приводит к неоднозначности цитирования ошибки компиляции. Насколько я понимаю проблема состоит в том, что компилятор не знает, какое нечто поместить в D vtbl, но почему там даже был бы vtbl для D то, если это не определяет собственных виртуальных функций?

6
задан Georg Fritzsche 9 February 2010 в 01:19
поделиться

1 ответ

Вы наследуете классы, содержащие виртуальные функции. Следовательно, в вашем классе есть виртуальные функции. Это так просто.

7
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: