C++中多重担任(multiple inheritance) 的名称歧义(name ambiguity)
在多重担任中, 假如多个基类包括沟通名字的成员函数, 则在派生类利用时, 容易产生歧义, 会导致堕落;
办理要领是: 在派生类中重写基类要领, 包围原要领, 再指定基类范畴(scope), 确定利用谁人基类的要领, 可以制止歧义;
代码如下:
/* * cppprimer.cpp * * Created on: 2014.1.10 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> #include <string> struct Base1 { void print (void) { std::cout << "Base 1" << std::endl;} }; struct Base2 { void print (void) { std::cout << "Base 2" << std::endl;} }; struct Derived1 : public Base1, public Base2 { void print (void) { //重写基类要领 Base1::print(); //指定利用何种 Base2::print(); } }; int main (void) { Derived1 d1; d1.print(); //名字沟通时, 会产生定名斗嘴! }
输出:
Base 1 Base 2
作者:csdn博客 Spike_King