C++多态的笼统解释

来源:互联网 发布:linux主目录是什么 编辑:程序博客网 时间:2024/05/29 16:58

首先,说一下多态,C++的多态是很多编程的基本,万物之源也不为过,广义上,多态指一段程序能够处理多种类型对象的能力,其实,多态就是接口重用,比如说,一个接口,针对不同类型方法、函数、对象,能有不同的处理,这就是多态。C++中,多态,分四种:强制多态,重载多态,类型参数化多态,包含多态。

强制多态就是强制转换数据的类型来实现的,也就是数据类型转换(显隐式),按照如下规则转换:

char,short---->int ------>unsigned------->long------->double<---------float

重载多态,分为函数重载和运算符重载,重载:函数名相同,形参必须不同,要么形参的个数不同,要么形参类型不同,其实重载的本质还是数据类的转换,比如说:

int add(int x,int y)

这是一个int类型的加法函数,如果没有重载机制,那么当我写一个其他类型,比如float类型的加法函数:

float add(float x,float y)

这样的时候,直接调用add(x,y)函数,并不可以,因为重名,无法判断调用那个,要想区分开,我只能将函数名add改名,比如一个写成add1,一个写成add2,这样才能区分,才能分开调用,但是其实两个函数都是写加法计算的,里面的内容是一样的,只是类型不一样而已,函数的操作是一样的,这样太麻烦了。有了函数重载之后上述写的两个函数就完全可以使用了,当你调用add(x,y)时,int类型和float类型都可以调用,系统会根据你的参数xy自动判断匹配到底调用哪一个数据类型的add函数,方便使用,方便记忆,“C++运行功能相近的函数在相同的作用域内以相同的函数名定义,从而形成重载”这就是实现了多态,之后再说运算符的重载,原理差不多。

以上两种多态,重载多态和类型转换多态,本质都是转换数据的类型,属于特殊的多态性,只是多态的表面而已。

多态最重要的一种是包含多态,是真正的多态,C++中用虚函数来实现包含多态,虚函数也就是整个多态性的精华,下一张详细介绍一下虚函数以及虚函数是如何实现多态的,与析构之间又是什么关系。

最后一种多态是参数化多态,大部分用模板来实现,分为函数模板和类模板两种,后面介绍。