1
8
您需要做的是将比较运算符“虚拟化”。 由于运算符不能是虚拟的,因此需要将其委托给其他对象。这里有一个可能的解决方案。
这个问题没有弄清楚人是否需要成为一个具体的班级。如果是这样,您可以使它不是纯虚拟的,并实现它以返回true。 这也使用RTTI,您可能会或可能不高兴。 |
2
7
添加虚拟函数int compare(const person&rperson),并在运算符中使用它 |
3
6
如果你有一个人和一个雇员,你仍然会遇到一个大问题——这个人可以与雇员比较,但不能与雇员比较。即:
这是件坏事。基本上你已经做了一个相等运算符 symmetric 编辑: 好吧,没有虚拟运算符-我想在别处添加虚拟比较函数-但是您仍然有对称问题。 |
4
6
这个问题没有一个很好的解决办法。 这在C++中实际上不是问题。在平等的基础上比较实体有什么意义? 编辑:一些关于应用于实体的平等的相关性的思考链接:
编辑2(2018年11月27日):
这里还有一个问题,它在OO设计中也有它的根源,而不是C++。设计一个具有自反性的比较运算符是不可能的。(
TL;博士:假设我们有
|
5
2
这里的大问题是-你如何决定平等? 是否可以将任何对象与层次结构中的任何其他对象进行比较?只能比较同一类型的对象吗?比较的标准在哪里? 解决方案的实现将取决于这些问题的答案。 |
6
1
让同一个人平等对待两个不同的员工是没有意义的,但这正是你的课程设计所允许的。你最好把身份安排在一个人身上。然后询问a.identity()==b.identity()。 |
7
1
为了使
这不是必然的,但却是必要的。
为此,您可以使用
当然
|
8
0
您需要使person::operator==virtual。 |
9
0
也可以将operator==置于类范围之外。在这种情况下,您可以创建必要的重载,也可以通过模板使其成为泛型。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |