C++ 增量运算符重载

标签 c++ operator-overloading

我正忙着为 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);
}

对于代码中的错误,我们深表歉意。这应该是预自增运算符重载。

最佳答案

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

它修改对象。可以是成员(member),也可以是非成员(member)。它可以是前缀和后缀。以下是通常如何实现前缀 (++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参数。

关于C++ 增量运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12319358/

相关文章:

c++ - 用于计算色差 (delta E) 和色彩空间转换的 C/C++ 库

c++ - 运算符重载 C 结构

c++ - 将一个对象数据复制到另一个相同类型的对象c++

c++ - C++ 如何选择要使用的运算符重载?

c++ - 将指向模板函数的指针作为函数参数传递?

C++ map 插入和查找性能和存储开销

两个单独文件之间的 C++ 友元函数声明

c++ - 在结构中定义固定大小的数组

c++ - 不同线程中的postmessage和message loop

c++ - QDataStream : Overloading >> for decorated QVector