日期:2014-05-17 浏览次数:20999 次
一、概念
重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法。
重载只是一种语言特性,是一种语法规则。
二、重载的表现形式
1、函数重载
函数重载就是函数名称相同,但定义却不同。函数重载使得程序员可以将一系列的函数族定义为一个统一的界面,但是却可以处理不同类型数据或接受不同个数的参数。这实现了统一接口,不同定义的思想。
简单地将函数重载概括为:两必须一可以
参数名必须相同。
参数列表必须不相同。
返回类型可以不相同。
函数重载与多态
重载是一种多态,有四种形式的多态:
虚函数多态:通过派生类重写基类函数
模板多态:
重载
转换
从基于绑定时间的多态分类,分为两种:动态(运行时多态)和静态(编译时多态)。
从这方面考虑函数重载是编译时多态,即静态多态,根据不同类型函数编译时会产生不同的名字如int_function和char_function等等,以此来区别调用。故重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。
2、运算符重载
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
运算符的重载在实际编程中使用很普遍,例如,“+”运算符既可以用于整数加,也可以用于浮点加,甚至是字符串的链接。
(1)为什么使用运算符重载?
有些数据类型需要用运算符连接来表达新的含义,如果不进行重载(重新定义),系统会按运算符的本来含义进行运算,这样会造成不可以进行运算或者不合逻辑,所以在运算前,需要给用到的运算符进行重新定义,通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。
(2)可以重载的运算符有哪些?
一元运算符:
+, -, !, ~, ++, --, true, false
二元运算符:
+, -, *, /, %, &, |, ^, <<, >>
关系运算符:
==, !=, <, >, <=, >=
必须成对存在
返回布尔值。
(3)定义
与类定义相似.
返回类型 operator 运算符 (形式参数表) { 函数体 }
例如: public static vector operator +(vector i)
参数个数的限定:
非成员函数:
单目运算符:参数表中只有一个参数;
双目运算符:参数表中只有两个参数
成员函数:
单目运算符:参数表中没有参数;
双目运算符:参数表中只有一个参数
三、对比
重载(overload)
a 同一个类内发生
b 函数名字必须相同
c 参数必须不同不同
d 返回类型可以不同