日期:2014-05-17  浏览次数:20920 次

重载----c#

一、概念

重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法。

重载只是一种语言特性,是一种语法规则。

 

二、重载的表现形式

1、函数重载

函数重载就是函数名称相同,但定义却不同。函数重载使得程序员可以将一系列的函数族定义为一个统一的界面,但是却可以处理不同类型数据或接受不同个数的参数。这实现了统一接口,不同定义的思想。

 

简单地将函数重载概括为:两必须一可以

参数名必须相同。

参数列表必须不相同。

返回类型可以不相同。

 

函数重载与多态

重载是一种多态,有四种形式的多态:

 虚函数多态:通过派生类重写基类函数

 模板多态:

 重载

 转换

从基于绑定时间的多态分类,分为两种:动态(运行时多态)和静态(编译时多态)。

从这方面考虑函数重载是编译时多态,即静态多态,根据不同类型函数编译时会产生不同的名字如int_function和char_function等等,以此来区别调用。故重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。

 

 

2、运算符重载

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

运算符的重载在实际编程中使用很普遍,例如,“+”运算符既可以用于整数加,也可以用于浮点加,甚至是字符串的链接。

 

(1)为什么使用运算符重载?

有些数据类型需要用运算符连接来表达新的含义,如果不进行重载(重新定义),系统会按运算符的本来含义进行运算,这样会造成不可以进行运算或者不合逻辑,所以在运算前,需要给用到的运算符进行重新定义,通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。

 

(2)可以重载的运算符有哪些?

一元运算符:

+, -, !, ~, ++, --, true, false

二元运算符:

+, -, *, /, %, &, |, ^, <<, >>

关系运算符:

==, !=, <, >, <=, >=

必须成对存在

返回布尔值。

(3)定义

与类定义相似.

返回类型      operator  运算符  (形式参数表) { 函数体 }

例如: public static vector operator +(vector i)

参数个数的限定:

 非成员函数:

  单目运算符:参数表中只有一个参数;

  双目运算符:参数表中只有两个参数

 

 成员函数:

  单目运算符:参数表中没有参数;

  双目运算符:参数表中只有一个参数

 

三、对比

重载(overload)

a 同一个类内发生

      b 函数名字必须相同

     c 参数必须不同不同

d 返回类型可以不同