我想定义一个抽象基类 X 并强制执行以下内容:
a) 每个继承自 X 的具体类 Y 都定义一个构造函数 Y(int x)
b) 应该可以测试两个 Y 对象是否相等。
对于a,一个不太好的解决方案是在X中放一个纯虚的fromInt方法 必须定义哪个具体类。但我不能强制施工。
对于 b),我似乎无法在 X 中使用纯虚方法
bool operator == (const X& other) const =0;
因为在覆盖的类中,这仍然是未定义的。定义不够
bool operator == (const Y& other) const {//stuff}
因为类型不匹配。我该如何解决这些问题?
最佳答案
您可以通过将无参数构造函数设为私有(private)并在您的基类中拥有一个公共(public)的单个 int 参数构造函数来强制构造。只要基类有一些纯虚方法,那么你的子类就必须调用那个构造函数。
至于运算符==,试试定义
bool operator == (const BaseClass& other) const { .. };
在你所有的子类中。最坏的情况,您可以在您的基础中定义一个纯虚拟的 public equals(const BaseClass& other) 方法。
编辑: 强制构造函数的事情并不完全正确。我的建议是强制子类调用单参数构造函数。他们可以有一个无参数构造函数,该构造函数将一个常量传递给构造函数中的基数。
关于C++ 对继承类强制执行条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633363/