动态多态性的实际例子&运算符重载

时间:2012-08-14 13:08:01

标签: c++ oop

我在采访中向我询问,因为我提到OOPS是我最喜欢的主题。

任何人都可以为动态多态性和运算符重载提供一些真实的例子吗?

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

5 个答案:

答案 0 :(得分:8)

多态性。

我们有车,对。想象一辆抽象的汽车。每辆车都可以加速。这将是一个多态函数。所以在每个(好吧,大多数,我们不算异国情调的东西)汽车你需要按下踏板加速。但是,按下它后发生的情况对于不同的汽车是不同的(阅读:实现定义)。

运营商重载。

你有复杂的数字。您可以使用普通数字对它们进行加,减,除(等)。但是,如何的方式是完全不同的。

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

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

答案 1 :(得分:5)

std::cout是运营商重载的典型代表之一。虽然实际操作符的选择是......有问题的...... <<的可扩展性与之前的所有内容相比都是巨大的,而且几乎所有后来的内容也是如此。另外,考虑所有MatrixVector类,迭代器,函数对象,以及<重载的所有类,以便它们可以是map的关键字或排序为std::string

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

或动态多态。没有虚函数和继承,std::function无法工作,这是一件非常重要的事情。还有基于继承的嵌入式端优化。无论何时需要在运行时可互换地处理不同类型,它都很有用。此外,有很多东西是有效动态多态,即使它们在技术上不是。例如,您从Windows API调用的每个函数都会通过动态链接器修复的函数指针表。它们是多态的,具有符合相同接口的那些函数的任何实现。没有操作系统API会有什么样的生活?无法生存。

答案 2 :(得分:1)

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

假设我们的课程Car包含多种子类型Maruti-800IndicaZenInova

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

这是动态多态的一个很好的例子。

答案 3 :(得分:0)

动态多态性: 自动车的运动模式。 当我们将它切换到运动模式时,我们仍然使用相同的加速踏板施加相同的压力,但自动齿轮在更高的转速下为我们改变。

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

答案 4 :(得分:0)

运算符重载的示例位于iostream operator<<或另一个例子是'make'functors

动态多态基本上是覆盖父级的虚方法,它允许你“编程到一个接口”(纯虚函数)。这与静态多态相反,它强制您使用具体类型以使用'重写'方法。 here是差异的一个很好的例子。