多重继承中极易发生调用函数二义性的问题,就是不同父类有同名方法,这样子类也就继承了同名方法,到时候具体调用哪个容易混淆。
在单继承中有一种解决方法,那就是在子类中重定义该函数,并在函数内通过类名+域操作符的方式显式调用指定父类的函数。这样逐级调用就可以实现二义性的避免。
但是,C++ Primer Plus说这招在面对多重继承时不太好使。因为子类的直接父类有多个,而这些直接父类有他们共同父类,这个共同的父类就是这个子类的间接父类。如果子类采用上述方法在子类的同一个函数内调用多个直接父类的同名函数,那么共同祖先的同名函数会被执行多次,而这有违你的初衷。
于是作者提出了一种模块化的解决方案,那就是各直接父类分别提供一部分功能,间接父类提供一部分功能,最后子类的同名函数把这些功能模块组合在一起。因为父类的成员函数要被子类使用,所以父类的模块应该设成protected,而它们的数据成员必须是private的,这样只维持一个子类的public接口给外界是较为安全的。
多重继承中父类函数的调用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...