[英]C++ dynamic binding with overloading
假设:
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。由于this
绑定是动态的,并且据我所知,重载具有静态绑定,因此我假设它显示3。 谁能解释一下编译器如何决定在此处调用哪个函数?
这个:
virtual int foo(const B& b) const;
不是对此的替代:
virtual int foo(const A& a) const;
因此,永远不能通过引用A
来调用它。
virtual int foo(const B& b) const;
不会覆盖任何内容,因此编译器选择第一个函数。 但是,可能在将来,我们将有一个动态类型解析,在这种情况下,编译器将选择第二个函数。 有关更多信息,请参见http://www2.research.att.com/~bs/multimethods.pdf
根本没有可供解决的过载。 您正在调用foo
的对象的类型为A
并且在A
仅存在一个函数foo(const A&)
。 动态调度在基类中产生函数。 在C ++中,成员函数由其名称和参数标识。 在父级不存在的库中添加重载将无法对其进行动态分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.