我想在结构层次结构(抽象基 A 和子 B)中实现前缀和后缀运算符++。当仅在基类中实现前缀时,这工作正常。然而,当在子类中实现后缀版本时(因为它不能在抽象类中实现)它不起作用。
struct A {
virtual A& operator++(){std::cout << "A: prefix ++" << std::endl; return *this;}
virtual void foo() = 0;
};
struct B : A {
void foo() override {};
//virtual B& operator++() override {std::cout << "B: prefix ++" << std::endl; return *this;}
//B operator++(int i) {std::cout << "B: postfix ++" << std::endl; return *this;}
};
int main(int argc, const char * argv[]) {
B b;
++b; // Compile error here if I implement postfix in B
return 0;
}
问题是我想避免重复代码,因为所有派生类都将以相同的方式使用 operator++,所以最好不要在各自的类中实现它们。使用抽象类的全部目的就是为了避免这种情况!
我的问题是:解决这个问题最优雅的方法是什么?
编辑。错误消息:无法增加类型“B”的值
最佳答案
问题是派生类中的 operator++
将名称隐藏在基类中。尝试将以下内容添加到 B
:
using A::operator++;
尽管如此,您可能会发现很难使后增量函数表现出多态性。协变返回类型将不起作用。
关于c++ - 具有抽象继承的后缀运算符++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240699/