首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中,多态性和方法重载几乎是相同的吗?

在C++中,多态性和方法重载几乎是相同的吗?
EN

Stack Overflow用户
提问于 2012-09-22 21:35:56
回答 5查看 2.8K关注 0票数 2

在C++中,有两种类型的多态性:

  1. 对象多态性
  2. 功能多态性

函数多态性与方法或函数重载完全相同,也就是说,我们使用相同的方法名,具有不同的参数和返回类型。现在的问题是为什么我们在OOP中有一个花哨的名字多态性

什么能明显区分多态和方法重载?有人能用情景来解释吗。谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-22 21:40:55

多态意味着“多种形式”。

在计算机科学中,主要有三种不同的多态性:

  • Adhoc多态性

代码语言:javascript
复制
- Function overloading  
- C++ template specialization  

  • 亚型多态
    • 子类和虚拟方法

  • 参数多态性

代码语言:javascript
复制
- C++ templates
- C# and Java Generics
- Polymorphic functions in ML

多态性是一个概念。AdHoc多态性意味着同名不同的实现。

代码语言:javascript
复制
// Function overloading
void f(A a);  
void f(B b);
// template specialization
template <typename T> class A;  
template <> class A<int> {}  
template <> class A<float> {}
票数 3
EN

Stack Overflow用户

发布于 2012-09-22 21:45:02

多态:多聚=>倍数,形态=>形式。

简单地说,C++中存在着多种多态机制,而函数重载是一种多态性。

http://www.catonmat.net/blog/cpp-polymorphism/

票数 2
EN

Stack Overflow用户

发布于 2012-09-22 22:10:05

多态性的本质是能够通过单一语法形式的(通常是C++中的函数调用)提供不同的行为。根据这个定义,虚拟函数调用(实际上表示OOP多态性)和重载函数调用都是多态的。

它们之间的区别在于在每种情况下选择特定行为的方式和时间。

对于虚拟函数调用,根据调用函数成员的对象的动态类型,在运行时进行调用。(当然,如果是通过基类指针或引用调用的话)。如果直接调用,它将在编译时被选中)。

对于重载的函数调用,它是根据函数调用的签名(参数类型和数量+cv-限定符)在编译时进行的。

因此,简单地说,差异重载是静态多态性,解决在编译时,虚拟函数是动态多态性,解决在运行时。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12547892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档