【发布时间】:2016-05-20 18:20:09
【问题描述】:
#include <iostream>
using namespace std;
class A{
private:
double price;
public:
A(double p):price(p){
}
virtual double abstractExample() = 0;
A* operator++(int dummy){
this->price = this->price + 1;
return this;
}
virtual ~A(){
}
void print(){
cout << price << endl;
}
};
class B : public A {
public:
B(int p): A(p){
}
double abstractExample(){
return 1;
}
};
int main(){
B* b = new B(5);
b->print();
b++->print();
return 0;
}
所以我有这个抽象类 A。我想重载 ++ 运算符。通常我只会写 A& operator ++(int dummy) 但在这种情况下我必须返回一个指向对象的指针,因为它是一个抽象类。有什么方法可以做到这一点,而无需在每个继承的类中编写单独的代码?
这给出了 5, 5 而不是 5, 6 的输入。
【问题讨论】:
-
你实现的后缀运算符不正确,因为它应该返回值之前修改。
-
@SergeyA “你实现的后缀运算符不正确” 是的,没错。但是如何处理抽象类呢?这是个好问题。
-
@πάνταῥεῖ this 说尝试使用 CRTP
-
@πάνταῥεῖ,还记得“阅读后燃烧”吗?不要这样做。不要在抽象类上实现后缀增量,因为你不能真正实现它。
-
注意:运算符与类的实例一起使用 - 而不是 (!) 与指向实例的指针一起使用!
标签: c++ overloading increment operator-keyword