多态的概念
字面理解:“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。可以类比为“打”这个字,可以说是“老师打同学”,是击打这个动作;还可以是“我去打酱油”,是舀取的意思;也可以是“打南边来了个喇嘛”,是“从”的意思。“打”即函数名,不同的意思就是不同功能的函数。
C++中的表现形式:
- 函数的多态性:具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。
- 对象behavior的多态性:允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
系统实现的角度看,多态性分为静态多态性和动态多态性两类。两者区别在于静态多样性要求在程序编译时就知道调用函数的全部信息,又称为编译时的多态性;动态多态性则不在编译时确定调用的函数,而是在程序运行时才动态确定操作所针对的对象。
函数重载
C++中允许有多个拥有类似功能的同名函数的存在,但是这些同名的函数的参数个数、类型或顺序这三个属性当中必须至少有一个与其余的同名函数存在差异。编译器可以通过名称修饰,找到与之相匹配的函数,从而实现不同的功能。这样一来,既减少了函数名的数量,又避免了名字空间的污染,也降低了程序员记忆的难度。需要注意的是只有函数返回值类型不同的函数不能作为重载函数。
函数重载的理解
-
函数重载是一种多态现象
-
编译原理—重载的函数符号表中生成的名称不一样。例如:
// 生成@sum$qiii int sum(int a,int b,int c ); // 生成@sum$qii int sum(int a,int b); // 生成@sum$qfff @ + sum + q + f + f + f(float) float sum(float a