请教关于友员运算符重载函数的继承问题

sunisri 2009-04-04 12:04:44
/*写这个程序的目的是将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”
}
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2009-04-17
  • 打赏
  • 举报
回复
请看下面的文章:
运算符重载小结
Jarrys 2009-04-04
  • 打赏
  • 举报
回复
不过这些确实违背了C++的思想、、、
Jarrys 2009-04-04
  • 打赏
  • 举报
回复
好像也可向下转换吧:


Base1向D_class,称为Downcast

还有一种称为叫做:Crosscast,是一种跨类层次的转换,用于多重继承中
arong1234 2009-04-04
  • 打赏
  • 举报
回复
无论你有多少种方法进行强制类型转换,这种思想就是不很合理,不明白楼主为什么要用这么奇怪的设计
arong1234 2009-04-04
  • 打赏
  • 举报
回复
你这等于要求在某个基类和另外一个派生类求和时,都转换成派生类进行计算,这完全时违背C++最基本的思想:基类向派生类转换应该是逻辑上就违法的。所以你这种想法首先是错误的,好好整理一下你的思想,不要瞎提要求
  • 打赏
  • 举报
回复
x+z; //出现"2 overloads have similar conversions”

这么要么无法转换到匹配的类型,要么就是二义性了吧。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧