C++相互依赖的类的继承

C++ inheritance for classes that depend on one another

本文关键字:继承 依赖 C++      更新时间:2023-10-16

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

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

我将如何告诉编译器在创建时使x_和y_成为PrimeFieldElementsPrimePoint类?

另外,有没有更好的方法来做到这一点,我错过了?

假设类之间的唯一区别是这些数据类型,我会做这样的事情:

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

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