0

あまり良くないタイトルですみません。それでは、私の詳細な質問をご覧ください。

CComplex実際、私は次のような演習問題に直面しました:複素数のクラスを定義します。次に、2 つのオブジェクトc1c2inを定義しCComplexます。次に、コンストラクターを使用して and を初期化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

今、私はそれを修正する方法がわかりません。

c2=c1PS: を使用すると、目標をまっすぐに達成できることがわかります。しかし、上記のコードに基づいてほとんど修正する方法を本当に知りたいです。また、複素数を伝えるためのより良い方法があれば知りたいです。

4

3 に答える 3

2

c2=c1使用することで目標をまっすぐに達成できることを私は知っています

それは機能し、その仕事を素晴らしく行います。したがって、より複雑な(そして誤った)構文で何を達成しようとしているのかわかりません。

于 2013-03-13T11:46:13.707 に答える
0

あなたはすでに正しい答えを知っているので、あなたの目標が何であるか正確にはわかりません。しかし、おそらくこれはあなたの誤ったバージョンのように「見え」、あなたにとってより良いものでしょうか?

c2 = CComplex(c1);
于 2013-03-13T11:57:00.613 に答える
0

yes, you cannot create c2 object and than use copy constructor on it, because copy constructor creates NEW object, you can use it directly

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

to create c2 as a copy of c1 or if you want to assign value to object use something like this:

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

also you should provide your own assignnment operator for such purposes

    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 に答える