Я обнаружил странное поведение при использовании ссылочной переменной.
Вот реализации классов:
class Base {
public:
virtual void Method() = 0;
};
class DerivedA : public Base {
public:
virtual void Method() {}
}
class DerivedB : public Base {
public:
virtual void Method() {}
}
Вот пример кода со странным поведением:
void main(int argc, char *argv[]) {
DerivedA a;
DerivedB b;
Base &base = a;
base.Method(); // Calls DerivedA::Method
base = b;
base.Method(); // Calls DerivedA::Method!!! Why doesn't call DerivedB.Method()?
}
В заключение, представляется, что таблица указателей виртуальных функций, «связанная» с эталонной переменной, определяется только при инициализации эталонной переменной.Если я переназначу ссылочную переменную, vfpt не изменится.
Что здесь происходит?