多态性之编译期多态和运行期多态(C++版)
C++中最为经典的就是多态性,多态性充分体现了面向对象的思想,并且是C++与C的最大区别之一。多态性分为编译期多态和运行期多态,也称为静态多态和动态多态,有些人也称其为编译时多态和运行时多态,不管什么称呼,万变不离其宗,一个是编译期的静态的多态,一个是运行期的动态的多态,那么它们在C++中分别体现在哪里呢?又有什么区别呢?下面将详细介绍(重点是运行期多态)。
1. 编译期多态(静态多态)
编译期多态,正如其名,就是在编译期确定的一种多态性。这个在C++中主要体现在函数模板,这里需要注意的是函数重载和多态无关,很多地方把函数重载也误认为是编译期多态,这是错误的。
那么函数模板是如何体现编译期多态的呢?下面举一个简单的例子就可以明白。
// 例1:函数模板体现出编译期多态
#include <iostream>
template <typename T>
T add(T a, T b)
{
T c = a + b;
return c;
}
int main()
{
int i1 = 1;
int i2 = 2;
int iResult = 0;
iResult = add(i1, i2);
std::cout << "The result of integer is " << iResult << std::endl;
double d1 = 1.