下面是一元运算符++的运算符重载代码
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // 0 to infinite
int inches; // 0 to 12
public:
// required constructors
Distance() {
feet = 0;
inches = 0;
}
Distance(int f, int i) {
feet = f;
inches = i;
}
// method to display distance
void displayDistance() {
cout << "F: " << feet << " I:" << inches <<endl;
}
// overloaded minus (-) operator
Distance operator++ () {
feet = feet+1;
inches = inches+1;
return Distance(feet, inches);
}
};
int main() {
Distance D1(11, 10), D2(-5, 11);
++D1; // increment by 1
D1.displayDistance(); // display D1
++D2; // increment by 1
D2.displayDistance(); // display D2
return 0;
}
当我使用上面代码时,我可以成功地使用前缀运算符D1和D2,但是我不知道如何重载后缀运算符D1和D2,即使我在上面的代码中尝试了这些,它也显示了我的错误,所以我们如何将运算符重载的概念分别用于后缀和前缀?
2条答案
按热度按时间7kqas0il1#
对于后缀
operator++
,必须指定int
类型的额外(未使用)参数,如下所示:请参阅DEMO。
说明
定义前缀和后缀运算符时会出现问题,因为这两个版本使用相同的符号,这意味着这些运算符的重载版本具有相同的名称。此外,它们还具有相同的操作数数量和类型。
所以为了解决这个问题,后缀版本需要一个
int
类型的额外参数。当我们使用后缀操作符时,编译器自动/隐式提供0
作为这个参数的参数。lokaqttq2#
如果您需要post-inc/dec,则代码将为:
我们在形参中使用了
int
。它只是在后置/前置之间有很大的不同。运算符的前置形式的声明方式与其他一元运算符完全相同;后缀形式接受一个int类型的额外参数。