C++派生类为什么不能重载基类的函数

之前在社区里的C++语言论坛问了一个问题,

http://topic.csdn.net/u/20100520/16/5c0e208e-27a0-4ad8-af55-ca6e8913db5a.html

问题就是“派生类为什么不能重载基类的函数?”,下面看一段简单的C++代码:

 

 

这里派生类B的对象b,因为重新定义了function,虽然形参不同,但是仍然访问不到其基类A的function方法。也就是说派生类不能重载基类的函数。大家都会觉得这个就是规定,C++代码就是有这样规定的。但是我这个人有时候就愿意“钻钻牛角尖”。原因是我在本科的时候曾经听过一个C++老师这样说过:“C++代码的规则都是有意义的,你们回去编程的时候要想一想,C++代码为什么要这样定义,不这样定义会有什么问题?”这话我很喜欢,因为我觉得一个成熟的语言就是要无懈可击的,它这样规定一定有它的意义。所以我就开始思考如果不这样定义会怎样呢?结果我发现了问题的所在。
    问题就出在继承上,大家知道C++代码是可以多继承的,即一个派生类可以从多个基类继承。假设派生类可以重载基类的函数,那么看下如下代码C++会怎样处理呢?

 

 

以上代码假设派生类能重载基类的函数,那么就出现了两个function,这就出现了重定义的错误。所以这时C++就要不准同时继承A和B,对,问题就在这里。要么派生类能重载基类的函数,要么派生类不能多继承。这个也就是为什么JAVA的派生类能重载基类的函数,但是JAVA的派生类不能多继承的原因。说到这里,大家应该明白C++派生类为什么不能重载基类的函数了吧?这是因为这样做会与多继承冲突并产生歧义。这样的解释终于可以心服口服了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值