Предположим:
struct A {
virtual int foo(const A& a) const { return 1; }
};
struct B : A {
virtual int foo(const A& a) const { return 2; }
virtual int foo(const B& b) const { return 3; }
};
void testOverloadingBinding(const A& a,const B& b) {
cout << a.foo(b);
}
int main() {
testOverloadingBinding(B(),B());
}
Он печатает 2. Я бы предположил, что он печатает 3, поскольку this
привязка является динамической, и, насколько я знаю, перегрузка имеет статическую привязку.Может кто-нибудь объяснить, как компилятор решает, какую функцию вызывать здесь?