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

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

你可能感兴趣的:(多重继承中父类函数的调用)