Как объявить перегрузку оператора вне класса C++? Как объявить оператор сложения для двух класс, при условии, что сам оператор должен быть объявлен ВНЕ класса?
Пробовал так, выдает ошибку о том, что не могу получить доступ к полям a и b. С this игрался долго, руки опускаются. class Zespolona {
private:
double a, b;
public:
int getA () {
return a;
}
int getB () {
return b;
}
int setA (int i) {
a = i;
}
int setB (int i) {
b = i;
}
Zespolona operator+(Zespolona q);
Zespolona operator-(Zespolona q);
};
Zespolona operator +(Zespolona q) {
double aa = q.getA();
aa += a;
double bb = q.getB();
bb += this->b;
return q;
}
Zespolona operator -(Zespolona q) {
double aa = q.getA();
aa -= this->a;
double bb = q.getB();
bb -= this->b;
return q;
}
Если что-то в вопросе непонятно, прошу уточнить. Сейчас живу в Польше, русский забываю уже. Dziękuję z góry :)

21 Авг 2019 в 07:04
145 +1
0
Ответы
1

Чтобы объявить перегрузку оператора вне класса в C++, необходимо указать, что этот оператор является дружественной функцией класса. Для этого нужно использовать ключевое слово friend при объявлении функции вне класса.

Пример объявления оператора сложения для двух классов Zespolona вне класса:

#include <iostream>
class Zespolona {
private:
double a, b;
public:
Zespolona(double a, double b) : a(a), b(b) {}
int getA() { return a; }
int getB() { return b; }
friend Zespolona operator+(const Zespolona& q1, const Zespolona& q2);
};
Zespolona operator+(const Zespolona& q1, const Zespolona& q2) {
double newA = q1.a + q2.a;
double newB = q1.b + q2.b;
return Zespolona(newA, newB);
}
int main() {
Zespolona z1(1, 2);
Zespolona z2(3, 4);
Zespolona z3 = z1 + z2;
std::cout << "Sum: " << z3.getA() << " + " << z3.getB() << "i" << std::endl;
return 0;
}

В данном примере оператор + объявляется как дружественная функция класса Zespolona вне его определения. Теперь вы можете использовать этот оператор для сложения двух объектов класса Zespolona.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 913 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир