【发布时间】:2020-07-29 18:58:53
【问题描述】:
我有一个抽象类,它基本上是用作“迭代器接口”。也就是说,它是一个抽象迭代器,一些具体的类稍后会实现。为了使抽象类成为迭代器,我需要重载T operator++(int),其中T 是运算符重载的类。
class AbstractClass {
virtual AbstractClass operator++(int) = 0; // compile time error
virtual AbstractClass& operator++() = 0; // but this is fine
}
但是,我不能写 AbstractClass operator++(int),因为只有指针和对抽象类的引用才允许作为返回值。
有没有办法要求子类在纯 C++11 中重载 operator++(int)?
【问题讨论】:
-
你不是已经需要重写它以便能够创建子类的实例吗? (因为它是一个纯虚方法)
-
@anishsane,这表示后增量而不是前增量。
-
我不认为这是可以做到的。派生类型是运行时抽象的,返回类型是编译时的。做到这一点的唯一方法是让
AbstractClass仅假装是抽象的。 -
“我有一个抽象类,它基本上是用作“迭代器接口”。我认为是 Java 难民?
-
您可能还想阅读Why can't I do polymorphism with normal variables? Tour Q 应该作为一个被引用的骗子关闭。
标签: c++ c++11 abstract-class