0

对不起这么不好的标题。现在请看我的详细问题。

实际上,我遇到了这样一个练习问题:CComplex为复数定义一个类。然后,确定两个对象c1c2在 中CComplex。接下来,使用构造函数来初始化c1c2。之后,将c1' 值赋给c2

我的代码如下:

#include<iostream>
using namespace std;

class CComplex
{
public:
    CComplex(int real1,int image1)
    {
        real=real1;
        image=image1;
    }
    CComplex(CComplex &c)
    {
        real=c.real;
        image=c.image;
    }
public:
    void Display(void)
    {
        cout<<real<<"+"<<image<<"i"<<endl;
    }
private:
    int real,image;
};

int main()
{
    CComplex c1(10,20);
    CComplex c2(0,0);
    c1.Display();
    c2.Display();
    CComplex c2(c1);
    c2.Display();
    return 0;
}

它有一个错误'c2' : redefinition

然后,我变成CComplex c2(c1);c2(c1);

此时,它有一个错误,即error C2064: term does not evaluate to a function

现在,我不知道如何纠正它。

PS:我知道使用c2=c1可以直接达到目标。但是,我真的很想知道如何根据我上面的代码进行纠正。另外,我想知道是否有更好的方法来传达复数。

4

3 回答 3

2

我知道使用c2=c1可以直接达到目标

它会起作用,并且会出色地完成它的工作。因此,我看不到您要使用更复杂(且不正确)的语法来实现什么。

于 2013-03-13T11:46:13.707 回答
0

是的,您不能创建 c2 对象,而是在其上使用复制构造函数,因为复制构造函数会创建 NEW 对象,您可以直接使用它

CComplex c1(10,20);
c1.Display();
CComplex c2(c1);
c2.Display();

要将 c2 创建为 c1 的副本,或者如果要为对象分配值,请使用以下内容:

CComplex c1(10,20);
CComplex c2(0,0);
c1.Display();
c2.Display();
c2=c1;
c2.Display();

您也应该为此目的提供自己的赋值运算符

    CComplex& operator=(const CComplex& other){
    if (this != &other) // protect against invalid self-assignment
    {
        // possible operations if needed:
        // 1: allocate new memory and copy the elements
        // 2: deallocate old memory
        // 3: assign the new memory to the object

    }
    // to support chained assignment operators (a=b=c), always return *this
    return *this;
    }
于 2013-03-13T11:54:51.733 回答
0

我不确定你的目标是什么,因为你已经知道正确的答案。但是,也许这“看起来”更像您的错误版本,并且对您更好?

c2 = CComplex(c1);
于 2013-03-13T11:57:00.613 回答