Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как проверить, что класс имеет виртуальные методы?


Автор: chipset 7.4.2005, 22:36
Есть класс Т. Как узнать имеет ли он виртуальные методы, если нет его интерфейса?

Следующая задумка решает этот вопрос. Дело в том, что у виртуальных классов есть такой указатель vrpt, который указывает на таблицу с виртуальными методами. Если создать класс, который наследуется от данного нам класса и объявить в нем виртуальный метод, то в случае невиртуального класса Т, добавится поле и объем занимаемой памяти увеличится (на 2 байта); в случае же виртуальнго класса, размер останется прежним т.к. указатель на таблицу уже существует (но в саму таблицу добавляется новый метод). Вот код:
Код

// T - класс для проверки

class U: public T
{
public:
    virtual void f() {};
}

void main()
{
    if (sizeof(T)==sizeof(U))
        cout<<"T is virtual";
    else
        cout<<"T is not virtual";
}


Автор ответа: http://forum.vingrad.ru/index.php?act=Profile&CODE=03&MID=15

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)