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