微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 多态性与超载有什么区别?

我理解多态并且模糊地理解重载,但是会感谢一个彻底理解两个概念来解释分类差异是什么以及是否重载是或不是一种多态的形式的人(似乎对此有不同意见).

解决方法

核心的多态性是关于多个事物,它们都具有一定的一致性行为,这样您可以在特定的算法或过程中替换另一种.只要它们都提供预期的界面,该过程仍然可行.

重载并不是真的有这样的基础.只要命名两个或多个具有相同名称函数,只要它们具有不同的参数列表即可.编译器根据您传递的参数的类型,确定您实际使用的功能.

现在可以使用重载来创建多态.考虑以下几点:

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函数创建一个多形态的形式.但这并不意味着重载是多态的.

重载是一种语言工具.多态是一个概念.多态是关于使多个对象都以相同的方式工作.重载只是给予不同功能同名的一种方式.

原文地址:https://www.jb51.cc/c/110539.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐