重载 重写 隐藏

共同点:函数名相同

定义:

1)如果在类里函数名相同但是形参不同,则为重载。形参不同包括形参的类型个数以及顺序。

2)类间。重写和隐藏都发生在基类和派生类之间。

重写(覆盖):发生在派生类和基类之间。必须满足两个条件:(1)基类有virtual声明(2)函数名和形参必须完全相同。

隐藏:发生在派生类和基类之间,必须满足以下两个条件:(1)派生类中函数名与基类相同(2)基类中没有virtual声明或形参不同。

即子类重新定义基类的非虚函数。

重载和覆盖的区别:

1,方法的覆盖是基类和子类的关系,是垂直关系。

方法的重写是同一个类中不同方法之间的关系,是水平关系。

2,在覆盖中要求函数原型完全相同,在重写中只要求函数名相同且形参不同。

3,重载是根据实参表和形参表来匹配函数的,是在编译的时候进行的是早绑定。覆盖是根据对象对应存储空间的类型来选择函数体的,是在运行的时候动态绑定的,是晚绑定。

4,隐藏及子类重新定义基类的虚函数。

5,如果基类的函数要在子类中重新定义,就要在基类中申明virtual.另一方面,如果一个函数不会再子类中重新定义,就不要virtual,因为在运行时动态绑定虚函数要占用系统资源和时间。

6,在VS2010中,当定义两个完全相同的函数时,不会报错,而当调用这个函数时就会报错,即使没有执行。重载的函数匹配不是在编译的时候进行的。而是在预处理阶段进行的,与教科书上的结论矛盾。作何解释?欢迎讨论!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值