C++的多态性能应用在什么地方?举个例子
C++的多态性能应用在什么地方?举个例子
C++的多态性能应用在什么地方?举个例子
C++的多态性能应用在什么地方?举个例子
C++多态技术
摘要
本文描述了C++中的各种多态性.重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用.
关键词
多态 继承 虚函数 模板 宏 函数重载 泛型编程 泛型模式
导言
多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形.在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”.和纯粹的面向对象程序设计语言不同,C++中的多态有着更广泛的含义.除了常见的通过类继承和虚函数机制生效于运行期的动态多态(dynamic polymorphism)外,模板也允许将不同的特殊行为和单个泛化记号相关联,由于这种关联处理于编译期而非运行期,因此被称为静态多态(static polymorphism).
事实上,带变量的宏和函数重载机制也允许将不同的特殊行为和单个泛化记号相关联.然而,习惯上我们并不将它们展现出来的行为称为多态(或静态多态).今天,当我们谈及多态时,如果没有明确所指,默认就是动态多态,而静态多态则是指基于模板的多态.不过,在这篇以C++各种多态技术为主题的文章中,我们首先还是回顾一下C++社群争论已久的另一种“多态”:函数多态(function polymorphism),以及更不常提的“宏多态(macro polymorphism)”.
函数多态
也就是我们常说的函数重载(function overloading).基于不同的参数列表,同一个函数名字可以指向不同的函数定义:
// overload_poly.cpp
#include
#include
// 定义两个重载函数
int my_add(int a,int b)
{
return a + b;
}
int my_add(int a,std::string b)
{
return a + atoi(b.c_str());
}
int main()
{
int i = my_add(1,2); // 两个整数相加
int s = my_add(1,"2"); // 一个整数和一个字符串相加
std::cout