-1

C++中的函数重载和面向对象之间有关系吗?

如果是,那么这种关系是什么?

4

3 回答 3

4

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

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

  • 重载(一种特殊的多态性)
  • 模板(也是一种特殊的多态性)
  • 类继承(由于将每个类都定义为一个类型而导致的一种子类型多态性)

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

于 2012-09-18T00:16:02.603 回答
3

这些是不同的概念。

如前所述,重载是使用类型来确定功能。

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

寻求解决类似问题的语言通常同时提供这两种功能,但一种工具可以自由使用一种工具,而另一种工具则不能无害。

于 2012-09-18T00:11:31.957 回答
-1

函数重载与面向对象中最深刻的思想之一有关:数据类型决定函数或运算符如何行为的思想。

一个相关的想法是运算符重载。运算符(例如 + 或 -)可以应用于不同的数据类型,并且运算符将为所涉及的类型做正确的事情。

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

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

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

a + b

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

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

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

于 2012-09-18T00:02:18.980 回答