动态多态性与算子重载的实例

h4c*_*k3d 4 c++ oop

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

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

我只能在编码方面进行解释,比如计算不同形状的区域(虚函数+重写)和添加复数或串联连接(运算符重载).

Sin*_*all 8

多态性.

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

运算符重载.

你有复杂的数字.您可以使用普通数字对它们进行加,减,除(等).但是,你如何做到这一点是完全不同的.

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

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

  • @Gir,你可以买一辆混合动力汽车,既可以在电动发动机上启动,也可以在正常发动机上启动,具体取决于具体情况:P (2认同)

Pup*_*ppy 5

std::cout是运营商超载的典型代表之一.虽然实际操作员的选择是......值得怀疑的,但是<<与之前的所有内容相比,其可扩展性是巨大的,而且几乎所有后续内容都可以实现.另外,考虑所有MatrixVector类,迭代器,函数对象,所有那些具有<重载的类,因此它们可以是a map或者类似的键std::string.

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

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

  • 你的意思是?你仍然可以实现`os.writeln("Hello ", 42, " world").writeln("and chain if you坚持") &lt;&lt; "即使你很笨也可以混合" &lt;&lt; std::endl;` (2认同)