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