C ++增量运算符重载

时间:2012-09-07 13:43:43

标签: c++ operator-overloading

我正忙着为C ++中的Comp Sci模块做作业,我对其中一个问题感到有点困惑。它要求给出一个重载增量运算符的3个实现:

  1. 使用上一个问题中编码的成员函数Adjust()。
  2. 将重载运算符实现为友元函数。
  3. 将重载运算符实现为成员函数。
  4. 现在我理解了我认为重载运算符的概念,这没关系。但我实际上对第一个不太确定,使用现有的成员函数Adjust()。因为当我正在超载并且只是调用另一个函数时,如果你知道我的意思,它将是朋友或成员函数调用另一个成员函数。无论如何,任何帮助将不胜感激。以下是我的第2和第3号代码,仅供参考。

    //Friend Function
    friend Chequebook operator ++(const Chequebook &c); //Declaration in class.
    Chequebook operator++(const Chequebook &c) //Function
    {
        return Chequebook(c.Balance+100);
    }
    
    //Member Function
    Chequebook operator++(); //Declaration in class.
    Chequebook Chequebook::operator++() //Function.
    {
        return Chequebook(Balance+100);
    }
    

    对不起代码中的错误。这应该是一个预增量运算符重载。

3 个答案:

答案 0 :(得分:2)

我将第一个问题解释为“根据之前编码的成员函数Adjust实现operator ++”。

adjust可能是一个公共函数,因此不需要operator ++的成员实现。你将它实现为

Chequebook& operator++(Chequebook& i_lhs)
  {
  i_lhs.Adjust(1); // Or whatever Adjust actually takes as parameters.
  return i_lhs;
  }

答案 1 :(得分:2)

您可能误解了增量运算符的作用,或者您没有发布家庭作业的全文。

它修改了对象。它可以是成员,也可以是非成员。它可以是前缀和后缀。以下是通常如何实现前缀(++ x)增量的示例:

class X 
{
  int i;
public:

  // member prefix ++x
  X& operator++() { ++i; return *this;}
};

class Y 
{ 
  int i;
public:
  void adjust() {++i;}
};

// non-member prefix ++y
Y& operator++(Y& y) { y.adjust(); return y;}

class Z 
{ 
  int i;
public:
  // friend prefix ++z
  friend Z& operator++(Z& z) { z.i++; return z;}
};

后缀增量(x ++)不同,应该有额外的int参数。

答案 2 :(得分:0)

嗯,你的#2尝试显然已被破坏,因为你根本没有真正改变过对象,这不是++的语义,无论是前置还是后置。此外,您似乎从余额中减去增量