请参阅结尾处的编辑

我试图重载C++中的+运算符,以允许我添加两个复数。 (添加实数并添加虚数)。

这是我的重载函数:

ComplexNum operator+(ComplexNum x, ComplexNum y){
ComplexNum result;
result.real = (x.getReal() + y.getReal());
result.imag = (x.getImag() + y.getImag());

return result;
}

我的Complex Number构造函数接受两个int,并将第一个分配给int real,第二个分配给int imag。

当我尝试添加它们时:
ComplexNum num1 = ComplexNum(1,1);
    ComplexNum num2 = ComplexNum(2,3);
    ComplexNum num3;
    num3 = num1 + num2;
    printf("%d",num3.getReal());

结果是0。结果应为3(已添加num1和num2的实数部分)

编辑:我知道出了什么问题。我有.getReal()和.getImage()返回两倍。

最佳答案

由于operator +的参数声明为值,而不是引用,因此它们将通过副本传递,因此,如果ComplexNum的副本构造函数不起作用,则可能导致x和y的实部为0。

加法也可能起作用,但是当您调用num3的赋值运算符时,您会丢失真实的部分。

或者,可能只是打破了getReal()方法。

关于c++ - C++中的重载运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1288669/

10-13 03:26