2013-05-18 59 views
1
class A { 
    public : 
    int a; 
    virtual void fun() {} 
    virtual void init() {} 
}; 
class B { 
    public : 
    int b; 
    virtual void sum() {} 
}; 
class C : public A, public B{ 
    public : 
    int c; 
    virtual void dud() { 
     printf("ccc");} 
}; 

一些問題在上述類層次結構, 一些書中說,指針C.dud()是用於VMT A和C中C. CIR的有關虛擬方法表中的C++

但是當使用visual studio 2010進行調試時,任何地方都沒有C.dud()的條目...

VMD的c.dud()的指針在哪裏?

回答

3

該vtable是實現定義的。您的圖書可能與您的目標架構不匹配。您應該參考您的系統/體系結構的ABI以獲取此類信息。這樣一個規範的例子:http://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable。請注意,此規範(適用於Linux)沒有提及縮寫詞「VMT」或「CIR」(再次,因爲它是實現定義的)。