我正在编写一个具有三级继承的程序。要求我在基类中重载operator==
,然后在派生类中重写该函数(我不允许更改此设计)。
该函数是一个 bool 值,它对两个对象进行成员比较。我如何处理 super 返回值?在 Java 中获取这个值很简单:我只需将覆盖函数的第一行调用为 super,例如:
retValue = super.myFunction();
我需要实现相同的结果,但在 C++ 中并且使用糟糕的运算符重载。重载函数的一些伪代码将不胜感激。
我还有一个与此相关的问题;如果运算符用于来自不同子类的实例,会发生什么情况?例如sub1和sub2都继承自base,Main中的下面这行代码会执行哪个版本的函数:
if (sub1 == sub2)
它会产生编译错误吗?
编辑:首先,我是一名学生,所以我无法按照我希望的方式编写代码来完成这项任务。程序要求状态;
“车辆运算符重载:==运算符
Vehicle 类需要覆盖 == 运算符。如果两个对象的所有数据字段都相等并且它们的乘客列表相同,则这两个对象是相等的。这需要在基类中定义,然后在派生类中覆盖。”
我真的没有任何代码可以发布,因为在阅读 Billy 的回复时我意识到我实际上已经编写了不受类影响的 operator== 函数(这不允许我覆盖它,也不会满足程序要求)。
例子;
如果(sub1 == sub2)
完全是假设。我实际上会有一个 Vehicle 对象数组,我有一个继承自 Vehicle 的 Car 和 Airplane 类,然后是一个继承自 Car 的 MagicSchoolBus 和一个继承自 Airplane 的 Xwing。在 Vehicle 类中,我有一个 int 'vType_',它标识每个 Vehicle 实例所属的特定子类。为了防止运行时崩溃,我将简单地检查以确保对象在使用 == 运算符之前具有相同的 vType_。
尽管我更愿意编写比较函数,但不允许这样做。我必须想办法在基类中使用 operator== 函数的返回值,因为它正在比较几个数据成员,如果我在每个派生类中重写这段代码,我当然会被降级。
如果我不能使用该返回值,我要么必须重写代码,要么当一个对象在基类的成员中具有不同的值但在派生类中具有相同的值时,我将得到错误的结果。
作为 Vehicle 类的成员,我将不得不重写此函数,但无论如何我都会发布它,希望它可能有用。 每个派生类都有更多特定于这些类型车辆的成员,以及一组将进行比较的 Passenger 对象。
//重载相等运算符以进行成员比较
bool operator== (Vehicle& obj1, Vehicle& obj2) { bool retValue = false;
if (strcmp(obj1.getName(), obj2.getName()) == 0)
{
if (obj1.getType() == obj2.getType() && obj1.getFuel() == obj2.getFuel())
{
if (obj1.getRate() == obj2.getRate() && obj1.getStatus() == obj2.getStatus())
{
retValue = true;
}
}
}
return retValue;
最佳答案
因为 C++ 与 Java 不同,它支持多重继承,因此您需要通过 SUPER::operator==()
显式指定您需要使用哪个父类(super class)(将 SUPER 替换为真正的父类(super class)名称..)
关于c++ - 在C++中重写一个非void函数,supers的返回值返回到哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083789/