动态多态性和运算符重载的真实示例

Real life example of Dynamic Polymorphism & Operator Overloading

本文关键字:真实 重载 多态性 运算符 动态      更新时间:2023-10-16

这是我在一次采访中问到的,因为我提到OOPS是我最喜欢的科目。

谁能给出一些动态多态性和运算符重载的真实例子?

我只能用编码来解释,比如计算不同形状的区域(虚函数+覆盖)和添加复数或字符串连接(运算符重载)。

多态性。

我们有车,对吧。想想一辆抽象的汽车。每辆车都可以加速。这将是一个多态函数。因此,在每辆(好吧,大多数,我们不计算异国情调的东西)汽车中,您需要踩下踏板才能加速。但是,对于不同的汽车,按下后会发生什么是不同的(阅读:已定义的实现)。

运算符重载。

你有复数。您可以像使用普通数字一样对它们进行加、减、除(等)。但是,您的工作方式完全不同。

upd:没看到你在问题中提到了复数((我会想到一个更好的。

UPD2:嗯,你可以想到烹饪的过程。当你做饭时,你需要混合一些成分。您可以添加它们(例如将它们放在同一个盘子中),将它们分开(切),乘以它们(例如混合饮料)等等。我想这会让这些运算符超载:P

std::cout 是运算符重载的典型子项之一。虽然实际运营商的选择是...值得怀疑的是......,与之前的一切相比,<<的可扩展性是巨大的,几乎所有之后的东西也是如此。此外,考虑所有MatrixVector类、迭代器、函数对象,以及所有<重载的类,以便它们可以成为map的键或像std::string一样排序。

多态性非常简单。想想如果你没有模板形式的参数多态性,生活会是什么样子。天哪,太糟糕了。我是否为新类型重复此容器的代码,这是一个非常糟糕的主意,或者我是否使用无法处理复杂类型且完全不安全的void*, size垃圾?像qsort这样的东西的界面也无法使用。参数化多态性允许代码重用类型安全。

或动态多态性。 没有虚拟函数和继承std::function无法工作,这是一件非常重要的事情。还有基于继承的嵌入式优化。每当需要在运行时交替处理不同类型的类型时,它都很有用。此外,还有许多东西实际上是动态多态性的,即使它们在技术上不是。例如,从 Windows API 调用的每个函数都经过动态链接器修复的函数指针表。它们与符合同一接口的这些函数的任何实现都是多态的。如果没有操作系统 API,生活会是什么样子?不宜居住。

我对动态多态性有一个想法:

假设我们有一个类Car,它有几个子类型Maruti-800IndicaZenInova

假设在赛车游戏中,我们必须阻止一辆到达最终目的地的汽车。 目前我们不知道我们拥有哪种类型的汽车(无论是Maruti-800还是Indica或任何其他类型的汽车)。 所以我必须在超类引用上按中断(即 Car ),通过在运行时调用Car上的操作Break

这是动态多态性的很好的例子。

动态多态性:自动车上的运动模式。当我们将其切换到运动模式时,我们仍然使用相同的油门踏板施加相同的压力,但自动档位对我们来说以更高的转速更换。

运算符重载:移动电话。根据您打开的菜单,按钮会执行不同的操作。游戏中的D是转发的,在短信中它打印字符d。

运算符重载的一个例子是在 iostream 运算符中<<或者另一个例子是当"制作"函子时

动态多态性基本上是覆盖父级的虚拟方法,它允许您"编程到接口"(纯虚函数)。 这与静态多态性相反,静态多态性迫使您使用具体类型才能使用"重写"方法。 这是差异的一个很好的例子。