我有这段代码,但我不理解输出......
class Complex
{
private:
float re;
float im;
public:
Complex(float r = 0.0, float i = 0.0) : re(r), im(i){};
void Print(){cout << "Re=" << re <<",Im=" << im << endl;}
Complex operator++(); //prefiksna
Complex operator++(int); //postfiksna
};
Complex Complex ::operator++()
{
//First, re and im are incremented
//then a local object is created.
return Complex( ++re, ++im);
}
Complex Complex ::operator++(int k)
{
//First a local object is created
//Then re and im are incremented. WHY is this ??????
return Complex( re++, im++);
}
int main()
{
Complex c1(1.0,2.0), c2;
cout << "c1="; c1.Print();
c2 = c1++;
cout << "c2="; c2.Print();
cout << "c1="; c1.Print();
c2 = ++c1;
cout << "c2="; c2.Print();
cout << "c1="; c1.Print();
return 0;
}
输出结果为:
1。 C1 = RE = 1,林= 2
2。 C2 = RE = 1,林= 2
第3。 C1 = RE = 2,林= 3
4。 C2 = RE = 3,林= 4
5。 C1 = RE = 3,林= 4
有人可以解释这些输出吗? (1.是微不足道的我认为我理解3.和5.,只是想确定...)我对2.和4的差异非常感兴趣。主要是,不清楚为什么它是这样的。 。评论中的代码中还有一个问题(为什么这是??????)
答案 0 :(得分:2)
你的问题应该被关闭,作为所有其他曾经问过的人的副本&#34;预增量和后增量是什么意思&#34;但是你的导师在尝试教导之前应该先学点东西:
Complex& Complex ::operator++()
{
//First, re and im are incremented
++re; ++im;
//then there is no need to create a local object.
return *this;
}
您测试它的方式,优化器可以忽略教师错误代码所暗示的额外工作。但是,如果您应该学习如何编写前后增量运算符(这是超越它们意味着什么的一步),那么请正确地了解pre应该如何以及为什么比post更有效。