如果一个子类继承多个基类,这多个基类都有一个相同的函数,那么子类调用这个相同的函数就会产生多义性,编译就不能通过:
class base1{
public:virtual void fun1(){ cout << "1" << endl; }
};
class base2{
public:virtual void fun1(){ cout << "2" << endl; }
};
class base3{
public:virtual void fun1(){ cout << "3" << endl; }
};class derive :public base1, public base2, public base3{
};int main(){derive a;a.fun1(); //fun1不明确return 0;
}
解决方法可以是在子类中重写这个函数,这样就会调用子类的函数,不会产生多义
class base1{
public:virtual void fun1(){ cout << "1" << endl; }
};
class base2{
public:virtual void fun1(){ cout << "2" << endl; }
};
class base3{
public:virtual void fun1(){ cout << "3" << endl; }
};class derive :public base1, public base2, public base3{
public:virtual void fun1(){ cout << "derive" << endl; }
};int main(){derive a;a.fun1();return 0;
}