为什么这里打印的复数不正确?

时间:2019-07-07 15:48:27

标签: c++ class complex-numbers

我正在尝试完成使用复数运算的C ++赋值代码。我在操作中使用的逻辑几乎可以,但是我无法按需输出。这肯定是一个逻辑错误,但我只是不明白。

我已经尝试过构造函数,参数化等等,但是我只是不明白。

#include<iostream>
using namespace std;
class complex
{
     int r, i;
public:
    int Read()
    {
        cout << "Enter Real part" << endl;
        cin >> r;
        cout << "Enter Imaginary part" << endl;
        cin >> i;
        return 0;
    }

    complex Add(complex A, complex B)
    {
        complex sum;
        sum.r = A.r + B.r;
        sum.i = A.i + B.i;
        return sum;
    }
    complex Subtract(complex A, complex B)
    {
        complex diff;
        diff.r = A.r - B.r;
        diff.i = A.i - B.i;
        return diff;
    }
    complex Multiply(complex A, complex B)
    {
        complex prod;
        prod.r = A.r*B.r + A.i*B.i*(-1);
        prod.i = A.r*B.i + B.r*A.i;
        return prod;
    }
    complex Divide(complex A, complex B)
    {
        complex c_B; //conjugate of complex number B
        c_B.r = B.r;
        c_B.i = -B.i;
        complex quotient;
        complex numerator;
        complex denominator;
        numerator.Multiply(A, c_B);
        denominator.Multiply(B, c_B);
        int commonDenom = denominator.r + denominator.i;
        quotient.r = numerator.r / commonDenom;
        quotient.i = numerator.i / commonDenom;
        return quotient;
    }

    int Display()
    {
        cout << r << "+" << i << "i" << endl;
        return 0;
    }

};

int main()
{
    complex a, b, c;
    cout << "Enter first complex number" << endl;
    a.Read();
    cout << "Enter second complex number" << endl;
    b.Read();
    c.Add(a, b);
    c.Display();
    c.Multiply(a, b);
    c.Display();



    system("pause");
    return 0;
}





the expected output on input of 1+2i and 2+3i should be
3+5i
8+i

but output is
-858993460+-858993460i
-858993460+-858993460i

1 个答案:

答案 0 :(得分:1)

看看这段代码:

c.Add(a, b);
c.Display(); // <- Here

需要考虑的事情:您要在此处显示哪个复数?

看看您的Add函数。请注意,调用c.Add(a, b)实际上并不将c设置为等于ab的和。相反,它实际上会忽略c(查看代码-请注意,您从未读取或写入接收器对象的任何字段),然后产生一个等于a + b的新复数。因此,当您致电c.Display()时,并没有打印总和。相反,您将使用c(它从未初始化其数据成员)并打印其值。

您可以使用几种不同的策略来解决此问题。从根本上讲,我将回顾一下您如何定义Add以及其他根据复数计算的成员函数。如果这些成员函数不使用接收器对象,则可以考虑使用

  1. 使它们成为static或自由函数,以便它们仅对它们的两个参数进行操作,而不是对两个参数加上隐式的this参数或

  2. 使它们仅使用一个参数,并使用两个复数作为接收器对象和参数。然后,您可以选择是否使这些功能修改接收方或返回新值。

一旦确定了解决上述问题的方式,请返回并查看为增加和打印值而编写的代码。您可能需要引入更多变量,以明确捕获已执行操作的总和,差异等。

希望这会有所帮助!