重载和对象定向之间的关系
Relation between Overloading and Object Orientation
C++中函数重载和对象定向之间有关系吗?
如果是,那么这是什么关系?
它们是相关的,因为大多数面向对象系统的特征之一是某种多态性,重载也提供了一种形式的多态性(特别是一种特殊的多态性)。
C++主要通过三种方式提供多态性:
- 重载(一种特殊多态性)
- 模板(也是一种特殊多态性)
- 类继承(由于将每个类定义为一个类型而导致的子类型多态性的一种形式)
事实上,这些特性中的每一个都提供了某种多态性,使它们相互关联。
这些是独立的概念。
如前所述,重载是使用类型来确定函数。
面向对象编程是通过建模事物的概念对数据和功能进行逻辑组织——通常是真实世界中的事物或其抽象。
寻求解决类似问题的语言通常同时提供这两种功能,但其中一种可以自由使用一种工具,而不是另一种。
函数重载与面向对象的最深层思想之一有关:数据类型决定函数或运算符的行为。
一个相关的概念是运算符重载。运算符(如+或-)可以应用于不同的数据类型,并且运算符将对所涉及的类型执行正确的操作。
您也可以为自己的类型编写运算符函数。
您可以在核心语言中看到运算符重载。将两个整数相加和将两个浮点数相加需要不同的机器指令。
C++编译器根据表达式中的类型执行不同的低级例程:
a + b
如果参数的类型发生变化,编译器将生成不同的指令。
再一次,这个想法在面向对象中根深蒂固:所涉及的数据类型决定了函数的行为。
然而,过载并不是这个想法的充分实现。类型信息在编译时可能是不完全已知的。这就是多态性发挥作用的地方。
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- 有符号整数类型的最小值和最大值之间关系的C++标准保证是什么