Я пишу программу с тремя уровнями наследования. Требуется перегрузить operator==
в базовом классе, а затем переопределить эту функцию в производных классах (мне не разрешено изменять этот дизайн).
Функция - это bool, который выполняет сравнение двух элементов для каждого элемента. Как мне обработать возвращаемое значение supers? В Java получить это значение просто: я просто делаю первую строку переопределенной функции вызовом super, например:
retValue = super.myFunction();
Мне нужно добиться того же результата, но в C ++ и с ужасной перегрузкой операторов. Некоторый псевдокод для перегруженной функции был бы очень признателен.
У меня также есть еще один вопрос, связанный с этим; Что произойдет, если оператор используется в экземплярах из разных подклассов? Например, sub1 и sub2 наследуют от base, какая версия функции будет выполняться для следующей строки кода в Main:
if (sub1 == sub2)
Будет ли генерироваться ошибка компилятора?
Редактировать: Во-первых, я студент, поэтому я не могу написать код для выполнения этой задачи так, как мне бы хотелось. Состояние требований программы;
"Перегрузка оператора транспортного средства: оператор ==
Класс Vehicle должен переопределить оператор ==. Два объекта равны, если все их поля данных равны и если их списки пассажиров идентичны. Это необходимо определить в базовом классе, а затем переопределить в производных классах. "
У меня нет кода для публикации, потому что, читая ответ Билли, я понял, что на самом деле написал функцию operator ==, свободную от класса (что не позволит мне переопределить ее и не встретит требования программы).
Пример;
if (sub1 == sub2)
был полностью гипотетическим. На самом деле у меня будет массив объектов Vehicle, у меня есть класс Car и Airplane, который наследуется от Vehicle, а затем MagicSchoolBus, который наследуется от Car, и Xwing, который наследуется от Airplane. В классе Vehicle у меня есть int 'vType_', который определяет конкретный подкласс, к которому принадлежит каждый экземпляр Vehicle. Чтобы предотвратить сбой во время выполнения, я просто проверю, чтобы убедиться, что объекты имеют одинаковый vType_, прежде чем использовать оператор ==.
Столько, сколько я бы предпочел написать функцию сравнения, мне не позволено. Мне нужно найти способ использовать возвращаемое значение из функции operator == в базовом классе, потому что он сравнивает несколько элементов данных, и, конечно, я буду понижен, если переписываю этот код в каждом из производных классов.
Если я не могу использовать это возвращаемое значение, мне придется либо переписать код, либо я получу неправильный результат, если у объекта разные значения в элементах базового класса, но те же значения в производном классе.
Мне придется переписать эту функцию как члена класса Vehicle, но я все равно опубликую ее в надежде, что она может быть полезной.
Каждый из производных классов имеет еще несколько членов, специфичных для этих типов транспортных средств, и массив объектов Passenger, которые будут сравниваться.
// оператор равенства перегружен для сравнения элементов
оператор bool == (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;
}