重载与面向对象的关系

时间:2012-09-18 00:02:19

标签: c++ oop operator-overloading overloading

C ++中函数重载和面向对象之间是否存在关系?

如果是的话那那么这个关系是什么?

3 个答案:

答案 0 :(得分:4)

它们在某种意义上是相关的,大多数面向对象系统的特征之一是某种多态性,而重载也提供了一种多态性形式(特别是一种特殊的多态性形式)。

C ++主要以三种方式提供多态性:

  • 重载(ad-hoc多态的一种形式)
  • 模板(也是ad-hoc多态的一种形式)
  • 类继承(由于将每个类定义为类型而导致的一种子类型多态)

事实上,这些特征中的每一个都提供了某种使它们相关的多态性。

答案 1 :(得分:3)

这些是不同的概念。

如上所述,重载是使用类型来确定函数。

面向对象编程是通过建模事物的概念来对数据和函数进行逻辑组织 - 通常是现实世界或它的抽象。

寻求解决类似问题的语言通常会提供这两种功能,但是可以自由地使用一种工具而不会使用其他工具。

答案 2 :(得分:-1)

函数重载与面向对象中最深刻的想法之一有关:数据类型决定函数或操作符的行为方式。

一个相关的想法是运算符重载。运算符(例如+或 - )可以应用于不同的数据类型,运算符将对所涉及的类型执行正确的操作。

您还可以为自己的类型编写操作符函数。

您可以在核心语言中看到运算符重载。添加两个整数并添加两个浮点数需要不同的机器指令。

C ++编译器根据表达式中的类型执行不同的低级例程:

a + b

如果参数类型发生变化,编译器会生成不同的指令。

再一次,这个想法在面向对象方面根深蒂固:所涉及的数据类型决定了函数的行为。

然而,重载不是这个想法的完整实现。在编译时可能不完全知道类型信息。这就是多态性发挥作用的地方。