【发布时间】:2020-10-04 22:01:04
【问题描述】:
我有一个名为 X 的虚拟类和子类 X1 X2 和 X3。
澄清:这些类是哑数据:int、double、string、vector<> 前面的。可能有指向只读静态数据结构的指针,其中相等是指针是否相等的浅检查。不会有例如FILE*,您可以通过多种方式确定打开的文件是否相等。
我有两个 X* 类型的指针,它们实际上指向子类。
检查相等性的最简单方法是什么?
只是为了表明我已经投入了一些工作,我的计划是:给X一个虚拟方法IsEqual(),它需要一个X* pxThat。每个子类都实现这个方法。该方法将使用dynamic_cast<> 来查看参数是否是它自己的类,如果不是则报告false。否则它将使用动态转换参数逐个字段检查相等性。
不过,我想知道是否有更简单的方法可以做到这一点?
【问题讨论】:
-
当
operator==已经存在时,不要去发明自己的名字。动态转换不应该是相关的,因为除非您使用模板函数,否则不会提供任何“坏”作为参数。 -
IsEqual的定义是什么?同一个例子?相同的数据成员?你真的应该发布一些代码。
-
@tadman 我可以让 operator== 虚拟吗?不知道那个。或者如果我不能,它会如何工作?
-
@tadman 如果我不使用
dynamic_cast<>,那么我有一个指向基类的指针。在这种情况下,我如何将其与this进行比较? -
@tadman thx,添加了内容说明
标签: c++ polymorphism