我正忙着为C ++中的Comp Sci模块做作业,我对其中一个问题感到有点困惑。它要求给出一个重载增量运算符的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);
}
对不起代码中的错误。这应该是一个预增量运算符重载。
答案 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尝试显然已被破坏,因为你根本没有真正改变过对象,这不是++
的语义,无论是前置还是后置。此外,您似乎从余额中减去到增量?