多重继承中父类函数的调用

多重继承中极易发生调用函数二义性的问题,就是不同父类有同名方法,这样子类也就继承了同名方法,到时候具体调用哪个容易混淆。
在单继承中有一种解决方法,那就是在子类中重定义该函数,并在函数内通过类名+域操作符的方式显式调用指定父类的函数。这样逐级调用就可以实现二义性的避免。
但是,C++ Primer Plus说这招在面对多重继承时不太好使。因为子类的直接父类有多个,而这些直接父类有他们共同父类,这个共同的父类就是这个子类的间接父类。如果子类采用上述方法在子类的同一个函数内调用多个直接父类的同名函数,那么共同祖先的同名函数会被执行多次,而这有违你的初衷。
于是作者提出了一种模块化的解决方案,那就是各直接父类分别提供一部分功能,间接父类提供一部分功能,最后子类的同名函数把这些功能模块组合在一起。因为父类的成员函数要被子类使用,所以父类的模块应该设成protected,而它们的数据成员必须是private的,这样只维持一个子类的public接口给外界是较为安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx阅读 14,035评论 0 41
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,158评论 0 62
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,087评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 最重要的当然放到最后才说,这个属于投资篇,也是整个理财知识分享的最后一篇。写完,收工。(写得有点散了,具体的操作在...
    知识分享阅读 172评论 0 0