次のコードブロックがあるとします。
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が現在を指していることを示すものは何ですか? DerivedClass?)。私もC#から来ているので、これはCLRのないネイティブコードであるため、このアイデアは私には異質です。