Поиск в виртуальной таблице c ++ - как выполняется поиск и замена

Возьмем следующий пример:

class Base{
    virtual string function1(){ return "Base - function1"; };
    virtual string function2(){ return "Base - function2"; };
};

class Derived : public Base {
    virtual string function2(){ return "Derived - function2"; };
    virtual string function1(){ return "Derived - function1"; };
    string function3() { return "Derived - function3"; };
};

Итак, структура vtable похожа на

Base-vTable
-----------------------
name_of_function address_of_function
function1   &function1
function2   &function2
-----------------------
-----------------------
Derived-vTable
-----------------------
name_of_function address_of_function
function1   &function1
function2   &function2

или похожа на

    Base-vTable
-----------------------
    Offset function
    +0  function1
    +4  function2
-----------------------
-----------------------
    Derived-vTable
-----------------------
    Offset function
    +0  function1
    +4  function2

Если она похожа на последнюю? тогда что это за смещение? где это используется?

И имя функции: Это искаженное имя функции? если оно искажено, то базовое и производное искаженные имена не будут совпадать, и поиск vtable не будет работать. Компилятор искажает все имена виртуальных функций, поэтому это должно быть искаженное имя, означает ли это, что искаженное имя для базового & производное то же самое, если это виртуальная функция.

6
задан harish 4 November 2011 в 06:51
поделиться