C ++ виртуальная таблица MI (множественное наследование)
Посмотрите на следующий код C ++
class Base1 {
public:
Base1();
virtual ~Base1();
virtual void speakClearly();
virtual Base1 *clone() const;
protected:
float data_Base1;
};
class Base2 {
public:
Base2();
virtual ~Base2();
virtual void mumble();
virtual Base2 *clone() const;
protected:
float data_Base2;
};
class Derived : public Base1, public Base2 {
public:
Derived();
virtual ~Derived();
virtual Derived *clone() const;
protected:
float data_Derived;
};
«Внутри объектной модели C ++» 4.2 говорится, что макет виртуальной таблицы классов Base1, Base2 и Derived выглядит следующим образом:
Мой вопрос:
Виртуальная таблица субобъекта Base1 класса Derived содержитBase2::mumble
Почему я знаю, что класс Derived поделился этой виртуальной таблицей с Base1, поэтому я думаю, что функция Base2 не должна появляться здесь. Может кто-нибудь сказать мне, почему? Спасибо.