我正忙着为 C++ 的 Comp Sci 模块做作业,我只是对其中一个问题有点困惑。它要求提供重载增量运算符的 3 个实现:
- 使用上一个问题中编码的成员函数Adjust()。
- 将重载运算符实现为友元函数。
- 将重载运算符实现为成员函数。
现在我理解了重载运算符的概念,我认为这没关系。但我实际上不太确定第一个,使用现有的成员函数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/