一、定义
①从广义上说,多态性是指:一段程序能够处理多种类型对象的能力。在C++
语言中,这种多态性可以通过包含多态4种形式来实现。强制多态、重载多态、类型参数化多态、包含多态。
②从实现上来说,多态的分类:静态多态、动态多态。
二、 广义上的多态
-
强制多态(Coercive Polymorphism):
- 也称为强制类型转换,允许一个类型被当作另一个类型来使用。这种多态通常涉及到隐式或显式的类型转换。
-
重载多态(Overloading Polymorphism):
- 这是编译时多态的一个具体体现,包括函数重载和运算符重载。在这类多态中,同一名称的函数或运算符可以有不同的实现,这些实现根据参数类型和数量进行区分。
- 例如,多个同名函数可以处理不同参数类型,实现了根据上下文的不同调用适当的实现。
-
类型参数化多态(Parametric Polymorphism):
- 也称为泛型多态,是指函数或数据结构的行为不依赖于特定类型,而是可以在不同类型上使用。
- C++ 中的模板(templates)就是一个例子。模板允许你编写可接受任何类型的函数或类。
- 示例:
template <typename T> T add(T a, T b) { return a + b; }
-
包含多态(Inclusion Polymorphism):
- 指的是通过基类指针或引用来引用派生类对象,通常涉及继承和虚函数。
- 这种多态性允许调用被重写的成员函数,从而实现运行时动态绑定。
三、 多态的实现
编译时多态和运行时多态是从多态的实现时机和机制的角度进行分类的。这两种多态各自代表了不同的编程概念和技术,主要体现在以下几个方面:
编译时多态(Compile-time Polymorphism)
-
定义:编译时多态是在编译阶段决定具体的函数或操作,编译器根据参数类型和数量选择相应的函数实现。这种多态通常无法在运行时改变。
-
实现机制:
- 函数重载(Function Overloading):允许同一函数名根据参数类型或数量的不同,提供不同的实现。例如:
void print(int i);
- 函数重载(Function Overloading):允许同一函数名根据参数类型或数量的不同,提供不同的实现。例如: