【发布时间】:2021-07-11 02:51:29
【问题描述】:
根据作业要求,
我正在尝试实现前缀 ++ 和后缀 ++ 运算符重载作为同一个类中的成员函数和友元函数。
class dist {
private:
int kMeter;
int meter;
public:
// postfix
dist operator++(int unused) {
dist dd = *this;
(this -> meter)++;
return dd;
}
// prefix
dist operator++() {
++(this -> meter);
return *this;
}
dist(int k = 0, int m = 0) {
kMeter = k;
meter = m;
}
void print();
int getMeter() const { return meter; }
int getKMeter() const { return kMeter; }
friend dist operator++(dist& d, int unused); //postfix
friend dist operator++(dist& d); // prefix
};
dist operator++(dist& d, int unused) { // postfix friend func
dist dd = d; // copy the old value into dd
d.meter++;
return dd; // return the original value of d
}
dist operator++(dist& d) { // friend prefix ++
++d.meter;
return d; // return the final value of d
}
但是当我尝试使用前缀 ++ 或后缀 ++ 重载时,它会显示模棱两可的错误。
dist d2(1, 900);
dist d3(3, 800);
/// these following lines showing ambiguous error
cout << d2++ << endl;
cout << ++d3 << endl;
现在,
如何在同一个类文件中为同一个运算符使用两种类型的运算符重载而不会出现任何错误。
【问题讨论】:
-
为什么你想要两个不同的函数来做同样的事情?可能是 XY 问题。
-
@super 这是我弟弟的作业要求。这就是为什么我感到困惑
-
operator++()的前缀形式可能是成员,而后缀是非成员,反之亦然。任何一种形式都不可能同时是成员和非成员,因为这会导致模棱两可(例如,两个函数都非常匹配++x或x++)。friend声明声明非成员形式(因此前缀形式的friend声明不能与前缀形式的成员共存)。 -
我怀疑你哥哥的老师对作业有点不清楚。我建议你哥哥问他的老师澄清一下,或者和他的同学谈谈。
标签: c++ class operator-overloading operator-keyword