根据 Wikipedia,Multiple Dispatch是
...可以根据多个参数的运行时(动态)类型动态分派函数或方法。
但是,在 C++ 中,我可以覆盖派生类中的函数:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void method(int a) { cout << a; }
virtual void method(int a, int b) { cout << a + b; }
};
class Derived: public Base
{
void method(int a) { cout << a * 10 << endl; }
void method(int a, int b) { cout << (a + b) * 10 <<endl; }
};
int main()
{
Base* derived = new Derived;
derived->method(1);
derived->method(1, 2);
return 0;
}
这里method
是在运行时绑定的(因为我正在使用virtual
),并且根据输入参数选择特定的方法——这与维基百科对多调度的描述有什么不同?
第二个问题:如果 C++ 中存在这种多态性和方法重载的组合,那么支持多分派的语言有什么优势(如果有的话)?