Я просто пишу свой первый объективно ориентированный проект в своем университете. Мне было трудно перегрузить == operator. В моем базовом классе Организме у меня естьОператор == перегружен не сравнивается
friend bool operator==(const Organism &curr, const Organism &other);
bool operator==(const Organizm &curr, const Organizm &other) {
if (curr.x == other.x) {
if (curr.y == other.y)
return true;
}
return false;
}
животные наследуют от Организма, Fox и Wolf наследует от Animal. Когда я пытаюсь сравнить
Fox f(1, 2);
Wolf w(1, 2);
Organizm *o1, *o2;
o1 = &f;
o2 = &w;
bool ok = (o1 == o2);
Comparision возвращают ложь, даже если соответствующие переменные равны. Мне нужен оператор == для std :: find, потому что я сохраняю все свои организмы в std :: vector.
Несвязанный с вашей проблемой, но вложенный 'if' эквивалентен логическому И, а сравнения возвращают логический результат. Итак, все, что вам нужно сделать в теле функции, - это 'return curr.x == other.x && curr.y == other.y;' –
Также обратите пристальное внимание. Организм и Организм - это два разных слова. –
Об этом Organism and Organizm im с использованием польских имен для классов, и когда я переводил его перед публикацией, я забыл изменить все. –