我理解多态并且模糊地理解重载,但是会感谢一个彻底理解两个概念来解释分类差异是什么以及是否重载是或不是一种多态的形式的人(似乎对此有不同意见).
解决方法
核心的多态性是关于多个事物,它们都具有一定的一致性行为,这样您可以在特定的算法或过程中替换另一种.只要它们都提供预期的界面,该过程仍然可行.
重载并不是真的有这样的基础.只要命名两个或多个具有相同名称的函数,只要它们具有不同的参数列表即可.编译器根据您传递的参数的类型,确定您实际使用的功能.
现在可以使用重载来创建多态.考虑以下几点:
template<typename T> void func(T t) {call(t);}
这将调用call,将t作为参数.只要你提供一个类型T,其中call(t)是合法的C代码,这将工作.您可以通过重载函数调用来处理您使用func感兴趣的任何类型:
void call(int); void call(float); void call(vector<int>);
以这种方式,func是一个相对于其参数是多态(静态)的函数.它可以在任何类型上执行其操作,只要该类型具有适当的接口即可.该接口是使用该类型的变量调用函数调用的能力.
func(5); //Legal func(13.4); //Legal func(vector<int>{4,3,2,1}); //Legal func(vector<float>{}); //NOT legal
在这里,我们使用函数重载调用,通过func函数创建一个多形态的形式.但这并不意味着重载是多态的.
重载是一种语言工具.多态是一个概念.多态是关于使多个对象都以相同的方式工作.重载只是给予不同功能同名的一种方式.