在C++中,有两种类型的多态性:
函数多态性与方法或函数重载完全相同,也就是说,我们使用相同的方法名,具有不同的参数和返回类型。现在的问题是为什么我们在OOP中有一个花哨的名字多态性?
什么能明显区分多态和方法重载?有人能用情景来解释吗。谢谢
发布于 2012-09-22 21:40:55
多态意味着“多种形式”。
在计算机科学中,主要有三种不同的多态性:
- Function overloading
- C++ template specialization
- C++ templates
- C# and Java Generics
- Polymorphic functions in ML
多态性是一个概念。AdHoc多态性意味着同名不同的实现。
// 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> {}发布于 2012-09-22 21:45:02
多态:多聚=>倍数,形态=>形式。
简单地说,C++中存在着多种多态机制,而函数重载是一种多态性。
http://www.catonmat.net/blog/cpp-polymorphism/
发布于 2012-09-22 22:10:05
多态性的本质是能够通过单一语法形式的(通常是C++中的函数调用)提供不同的行为。根据这个定义,虚拟函数调用(实际上表示OOP多态性)和重载函数调用都是多态的。
它们之间的区别在于在每种情况下选择特定行为的方式和时间。
对于虚拟函数调用,根据调用函数成员的对象的动态类型,在运行时进行调用。(当然,如果是通过基类指针或引用调用的话)。如果直接调用,它将在编译时被选中)。
对于重载的函数调用,它是根据函数调用的签名(参数类型和数量+cv-限定符)在编译时进行的。
因此,简单地说,差异重载是静态多态性,解决在编译时,虚拟函数是动态多态性,解决在运行时。
https://stackoverflow.com/questions/12547892
复制相似问题