重载----c#

一、概念

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

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

 

二、重载的表现形式

1、函数重载

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

 

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

参数名必须相同。

参数列表必须不相同。

返回类型可以不相同。

 

函数重载与多态

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

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

 模板多态:

 重载

 转换

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

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

 

 

2、运算符重载

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

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

 

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

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

 

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

一元运算符:

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

二元运算符:

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

关系运算符:

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

必须成对存在

返回布尔值。

(3)定义

与类定义相似.

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

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

参数个数的限定:

 非成员函数:

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

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

 

 成员函数:

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

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

 

三、对比

重载(overload)

a 同一个类内发生

      b 函数名字必须相同

     c 参数必须不同不同

d 返回类型可以不同

 

重写(override):也叫覆盖。发生在继承关系中。派生类函数覆盖基类函数,实现不一样。

   a 不同的范围,分别位于基类和派生类中

   b 函数的名字相同

   c 参数相同

   d 基类函数必须有virtual关键字

       e   static 函数不可以被重写。

 

重新定义:是指派生类的函数屏蔽了与其同名的基类非虚(virtual)函数。

   a 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。

   b 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。

其实就是一句话,只要基类中的函数不用virtual修饰,那么派生类出现于基类同名的函数,基类的函数被隐藏。

 

四、重载的优点

同一接口,不同定义。便于编程。

例如,当一个类中相似功能函数有几十、上百个的时候,我们需要给这些函数同一命名,程序员就可以省去记函数名的精力,把更多的精力和重点放在实现程序上。

 

更多详细信息请查看 作者信息

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值