Как определяется базовый тип объекта во время выполнения?

Учитывая следующий блок кода:

class BaseClass
{
public:
    virtual void hello() { cout << "Hello from Base" << endl; }
};

class DerivedClass : public BaseClass
{
public:
    void hello() { cout << "Hello from Derived" << endl; }
};

int main()
{
    BaseClass base;
    DerivedClass derv;

    BaseClass* bp = &base;
    bp->hello();
    bp = &derv;
    bp->hello();
}

Как тип, на который указывает bp, определяется во время выполнения? Я понимаю, что он динамически связан, но каков механизм этого? Я запутался, потому что обычно ответом является компилятор, однако, поскольку он динамический, в этом примере это не так (или я ошибаюсь? Я предполагаю, что компилятор это заранее, но что указывает на то, что bp теперь указывает на производный класс?). Я также исхожу из C#, поэтому эта идея мне чужда, поскольку это нативный код без CLR.

0
задан Riken 20 April 2012 в 18:47
поделиться