添加复数代码

时间:2014-09-11 15:58:47

标签: c++ complex-numbers

class complex1   
{   
    public:
        int real,img;
        complex1(){}
        complex1(int a)
        {
            real=a;
            img=a;
        }
        complex1(int a,int b)
        {
            real=a;
            img=b;
        }

        complex1 sum(int x,complex1 y);
        complex1 sum(complex1,complex1);
        complex1 display(complex1); 
};

complex1 complex1::sum(int x,complex1 y)
{
    complex1 num;
    num.real=x+y.real;
    num.img=y.img;
    return num;
}

complex1 complex1::sum(complex1 a,complex1 b)
{
    complex1 num;
    num.real=a.real+b.real;
    num.img=a.img+b.img;
    return num;

}

complex1 complex1::display(complex1 c)
{
    cout<<"The complex number is:\n";
    cout<<c.real<<"+i"<<c.img;
}

main()
{
    complex1 p,q,r,s;
    p=complex1(2,4);
    q=complex1 (3,5);


    cout<<"\n";
    cout<<"p="<<display(p);
    cout<<"q="<<display(q);
}

使用构造函数我们需要添加两个复数。我收到了错误

  

错误:未在此范围内声明显示。

有什么建议吗?我哪里错了?

2 个答案:

答案 0 :(得分:1)

您收到此错误是因为您在实例方法实现之外调用display()而未在complex1的实例上调用它,因此编译器不知道在哪里找到它

您需要将其称为p.display(p)

但是,您有几个更严重的错误:

  1. sum()display()方法不会对this执行任何操作,因此它们的行为与静态方法类似,但仍需要实例。这令人困惑。让它们变得静止。 (无论如何,sum()方法应该可以实现为+运算符重载。)

  2. display()方法应该实现为<<运算符重载,将std::ofstream&作为左操作数,它应该返回std::ofstream&而不是一个complex1个对象。 (在你的实现中,它甚至根本不会返回一个complex1对象,即使它被声明为。这是一个错误。)

  3. 例如,要修复第一个点,我会完全删除sum()方法并使用自由运算符,如下所示:

    complex1 operator+(complex1 const & a, complex1 const & b)
    {
        return complex1(a.real + b.real, a.img + b.img);
    }
    

    由于您的complex1(int)构造函数是隐式隐式的(哈!),此运算符可以自动与complex1 + complex1complex1 + intint + complex1一起使用。 (但请注意,您的complex1(int)构造函数会将参数分配给realimg,这可能是一个错误;我希望您希望将img初始化为零。)

    要解决第二个问题,我会完全删除您的display()方法并使用免费的运算符,如下所示:

    std::ofstream & operator<<(std::ofstream & s, complex1 const & c)
    {
        return s << c.real << "+i" << c.img;
    }
    

    然后,要输出一个数字,您可以执行以下操作:

    std::cout << "p=" << p;
    

答案 1 :(得分:0)

您的display函数需要返回一个complex1对象,就像您在课堂上所说的那样。否则,您可以将存根更改为

void display(complex1);

此外,display成员函数,这意味着需要在类实例上调用它。你需要做

p.display();

此外,您可以为sum和其他+的{​​{1}}运算符重载,而不是使用int函数:

complex1