我正在尝试用C ++设计一个抽象类。它被称为AbstractCurve,它有 AbstractPoint就是由x和y坐标组成的,它们是AbstractFieldElements。 我想继承这个,例如,一个有PrimePoints和的PrimeCurve PrimeFieldElements。 如果我做这样的事情:
class AbstractPoint {
private:
AbstractFieldElement* x_;
AbstractFieldElement* y_;
};
在创建时,如何告诉编译器使x_和y_成为PrimeFieldElements PrimePoint课程?
此外,还有一些更好的方法可以解决这个问题吗?
答案 0 :(得分:1)
假设类之间的唯一区别是这些数据类型,我会这样做:
template <typename ElementType>
class Point {
private:
ElementType* x_;
ElementType* y_;
};
using AbstractPoint = Point<AbstractFieldElement>;
using PrimePoint = Point<PrimeFieldElement>;
如果我们将此提升到新的水平,我们可以继续前进
template <typename ElementType>
class Curve {
private:
using Point = Point<ElementType>;
std::vector<Point> points_;
};
using AbstractCurve = Curve<AbstractFieldElement>;
using PrimeFieldCure = Curve<PrimeFieldElement>;
使用继承是合理的,因为您建议为各种曲线/点类型提供常见行为,但如果不同的类型将使用不同的内部数据类型,那么模板就是可行的方法。