C ++ virtuelles Tabellenlayout von MI (Mehrfachvererbung)

Sehen Sie sich den folgenden C ++ - Code an

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;  
}; 

Das 《Inside of C ++ Object Model》 4.2 besagt, dass das virtuelle Tabellenlayout der Klassen Base1, Base2 und Derived wie folgt lautet:

Meine Frage ist :

Die virtuelle Tabelle des Base1-Unterobjekts der Klasse Derived enthältBase2::mumbleIch weiß, dass die abgeleitete Klasse diese virtuelle Tabelle mit Base1 geteilt hat, daher denke ich, dass die Funktion von Base2 hier nicht angezeigt werden sollte. Kann mir jemand sagen, warum? Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage