请教关于友员运算符重载函数的继承问题
/*写这个程序的目的是将Base1、Base2统一到D_class类中,即是进行加法时
无论左操作数是Base1类、Base2类还是D_class类,
如果涉及不同类型加法时都能调用 friend D_class operator + (const D_class & one,const D_class & two)
自动转换成D_class类,但是Base1、Base2的加法重载函数要予以保留,因为friend D_class operator + 中会用到
*/
class Base1{
public:int a;
Base1(int x=0):a(x){}
friend Base1 operator + (const Base1 &,const Base1 &);
};
Base1 operator + (const Base1 & one,const Base1 & two){
Base1 tmp(0);return tmp;//简便起见先不写代码
}
class Base2{
public:float b;
Base2(float x=0):b(x){}
friend Base2 operator + (const Base2 &,const Base2 &);
};
Base2 operator + (const Base2 & one,const Base2 & two){
Base2 tmp(0);return tmp; //简便起见先不写代码
}
class D_class:public Base1,public Base2{
public:D_class(int x=0):Base1(x){}
D_class(Base1 y):Base1(y.a){}
D_class(float x):Base2(x){}
D_class(Base2 y):Base2(y.b){} //这里有各种情况向D_class转换的构造函数
friend D_class operator + (const D_class & one,const D_class & two); //这里使用友员函数以便进行强制类型转换
};
D_class operator + (const D_class & one,const D_class & two){
D_class tmp;return tmp;//简便起见先不写代码,但是会调用到Base类中的加法重载函数
}
void main(){
D_class x,y;
Base1 z;
x+y; //没有问题
x+z; //出现"2 overloads have similar conversions”
}