@totorialman

Как сделать перегрузку «==»?

Есть класс Planet с перегрузкой friend bool operator==(Planet&, char*); (первый аргумент это переменная из этого же класса, второй переменная извне)
Инициализирую эту перегрузку уже вне класса
bool operator==(Planet& first, char* second) {
if (strlen(first.name) != strlen(second)) return false;
for (int t = 0; t < strlen(first.name); t++) {
if (first.name[t] != second[t]) {
return false;
}
}
return true;
}
(second это char*)
Проблема в том, что перегрузка не вызывается. Но если friend bool operator==(Planet&, Planet&); (и если инициализацию переписать) так, то все работает, подскажите в чем проблема. Если неправильно использую терминологию прошу поправить
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@dima20155
you don't choose c++. It chooses you
Замените строку
if (planets[i].name == name_d)
на
if (planets[i] == name_d)
Если хотите, чтобы вызывался operator==
Но у вас там кроме этого ещё очень много странностей.
Зачем сравниваете строки напрямую? Есть strcmp
Зачем вообще работаете с сырыми строками, если даже не следите за очисткой памяти?
Лучше замените все на std::string.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы