在C++中会导致二义性错误的有两种情况:
第一种:类里面定义了两个以上的重载函数,但是其中一个重载的函数有默认值,例如:
class Son
{
public :
void print();
void print(int i=10);
private :
protected :
};
这个时候调用print函数将引发二义性错误。
第二种错误:
子类继承了多个父类,多个父类中有相同的函数
‘
class Father
{
public
void father();
private :
protected :
};
class GrandFather
{
public :
void father();
private :
protected :
};
class Son : public Father, public GrandFather
{
public :
void print();
void print(int i=10);
private :
protected :
};
此时子类对象调用father()方法将引发二义性错误,有一种情况不会引发而已错误,那就是子类继承父类,但是父类和子类拥有相同的函数,这个时候子类的函数将隐藏父类的所有重名函数,不存在子类的函数和父类的函数重载,重载只发生在自己的对象里面多个同名的函数,不同的参数列表。