对于彼此依赖的类的C ++继承

时间:2014-12-12 22:27:06

标签: c++ oop inheritance

我正在尝试用C ++设计一个抽象类。它被称为AbstractCurve,它有 AbstractPoint就是由x和y坐标组成的,它们是AbstractFieldElements。 我想继承这个,例如,一个有PrimePoints和的PrimeCurve PrimeFieldElements。 如果我做这样的事情:

class AbstractPoint {
private:
    AbstractFieldElement* x_;
    AbstractFieldElement* y_;
};

在创建时,如何告诉编译器使x_和y_成为PrimeFieldElements PrimePoint课程?

此外,还有一些更好的方法可以解决这个问题吗?

1 个答案:

答案 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>;

使用继承是合理的,因为您建议为各种曲线/点类型提供常见行为,但如果不同的类型将使用不同的内部数据类型,那么模板就是可行的方法。