【发布时间】:2020-06-12 08:02:38
【问题描述】:
我正在学习 c++,遇到了转换运算符的问题。我正在创建一个复杂类,可以对复数进行基本操作。
class complex
{
double real, img;
public:
complex(double re=0,double im=0){
real = re;
img = im;
}
double get_real() const{
return real;
}
double get_img() const{
return img;
}
};
我重载了 + 运算符:
complex operator+(complex a,complex b){
return complex(a.get_real()+b.get_real(),a.get_img()+b.get_img());
}
由于构造函数,使用带有复数的双精度/整数添加代码可以正常工作。
complex a(2,4);
complex b = 1+a;
但是当我在类中使用转换运算符时
operator int(){
int re = real;
return re;
}
加法双/int 弯腰工作
b = 1 + a;
// ambiguous overload
这看起来很奇怪,谁能解释一下添加转换运算符是如何造成这种歧义的?
我在网上找不到任何资源。
【问题讨论】:
-
您能否edit您的问题并将您的代码sn-ps转换为minimal reproducible example。
-
您的编辑让情况变得更糟。请仔细阅读:minimal reproducible example.
-
我很抱歉。现在好吗?只保留必要的部分。我应该把它们放在一个街区里吗?
-
你没有读过这个:minimal reproducible example,是吗?总结:你的代码应该是最小的(去掉任何没用的东西),完整的(不要去掉太多,代码仍然需要编译),它应该是用户可以复制/粘贴/编译和运行并重现你的问题的东西他们的电脑。 “我应该把它们放在一个街区里吗?”_ 是的
-
我不确定整个复制粘贴的事情非常感谢您
标签: c++ type-conversion operator-overloading