C++ 对继承类强制执行条件

标签 c++ inheritance operators constraints equality

我想定义一个抽象基类 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/

相关文章:

javascript - typeof 运算符是否连续显示为一个变量分配的更改的不同数据类型?

c++ - Bazel:为 cc_binary/cc_test 设置运行时环境变量和配置文件位置

c++ - ZeroMQ:如何将 Poller 中使用的 pollitem_t 项转换回 ZeroMQ 套接字?

c++ - 前向声明的替代方案 : two classes using each other

c++ - MSVS 2012 "ambiguous call to overloaded function"中的编译器错误

ruby - 为什么 Ruby 不支持 i++ 或 i--(递增/递减运算符)?

C++ 从 Atan 创建 Atan2

c++ - 如何在 C++11 中将 u32string 转换为 int?

c#接口(interface)问题

c++ - 重载赋值运算符 - 多态容器