2

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

  1. 使用在上一个问题中编码的成员函数 Adjust()。
  2. 将重载运算符实现为友元函数。
  3. 将重载运算符实现为成员函数。

现在我理解了我认为的运算符重载的概念,没关系。但我其实不太确定第一个,使用现有的成员函数 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);
}

很抱歉代码中的错误。这应该是预增量运算符重载。

4

3 回答 3

2

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

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

Chequebook& operator++(Chequebook& i_lhs)
  {
  i_lhs.Adjust(1); // Or whatever Adjust actually takes as parameters.
  return i_lhs;
  }
于 2012-09-07T13:57:36.250 回答
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 参数。

于 2012-09-07T14:00:02.567 回答
0

好吧,您的 #2 尝试显然被破坏了,因为您实际上根本没有更改对象,这不是 的语义++,无论是 pre 还是 post。此外,您似乎正在从余额中减去以增加

于 2012-09-07T13:59:01.520 回答