рассмотрим следующую программу:
class Base {
public:
virtual void foo() const {
cout << "Base::foo()" << endl;
}
};
class Derived : public Base {
public:
virtual void foo() {
cout << "Derived::foo()" << endl;
}
};
void func(Base& obj) {
obj.foo();
}
void main() {
Derived d;
func(d); // Base::foo() is printed
}
Если я удалю const
из метода Base
класса foo
, тогда ] Вызывается Derived :: foo ()
.
Кажется, я не могу понять это поведение.
1) В чем причина такого поведения?
2) Это решено во время компиляции или выполнения?
Спасибо