如何在C ++ OOP中正确使用类中的函数

时间:2013-03-13 11:43:58

标签: c++ oop class

抱歉这样一个不好的头衔。现在请看我的详细问题。

实际上,我遇到了这样一个运动问题:确定一个复数的类CComplex。然后,在c1中确定两个对象c2CComplex。接下来,使用构造函数初始化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可以直接达到目标。但是,我真的想知道如何根据我上面的代码进行纠正。另外,我想知道是否有更好的方法来传达复杂的数字。

3 个答案:

答案 0 :(得分:2)

  

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

它会起作用,并且会很好地完成它的工作。因此,我不会用更复杂(和不正确)的语法来看到你想要实现的目标。

答案 1 :(得分: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;
    }

答案 2 :(得分:0)

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

c2 = CComplex(c1);