Postfix ++和前缀++在operatoroverloading C ++中的意义

时间:2015-12-22 18:27:41

标签: c++ oop operator-overloading operators

我有这段代码,但我不理解输出......

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的差异非常感兴趣。主要是,不清楚为什么它是这样的。 。评论中的代码中还有一个问题(为什么这是??????)

1 个答案:

答案 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更有效。