繁体   English   中英

具有重载的C ++动态绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM