oop — некоторые вопросы о таблице виртуальных методов в Stack Overflow

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 в CIR C.

но при отладке в Visual Studio 2010 нигде нет записи для C.dud () …

Где указатель c.dud () для VMT ??

1

Решение

Vtable определяется реализацией. Ваша книга может не соответствовать вашей целевой архитектуре. Вы должны обратиться к ABI вашей системы / архитектуры для получения такой информации. Пример такой спецификации: http://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable. Обратите внимание, что в этой спецификации (которая относится к Linux) не упоминаются аббревиатуры «VMT» или «CIR» (опять же, поскольку она определяется реализацией).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]