Задать вопрос

Как объявить перегрузку оператора вне класса 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 :)
  • Вопрос задан
  • 1048 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Zespolona operator+(const Zespolona& left, const Zespolona& right) { ... }
Zespolona operator-(const Zespolona& left, const Zespolona& right) { ... }

Внутри самого класса нужно добавить friend-объявления:
friend Zespolona operator+(const Zespolona& left, const Zespolona& right);
friend Zespolona operator-(const Zespolona& left, const Zespolona& right);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
#include <iostream>
using namespace std;

class Zespolona 
{
public:
	Zespolona(double _a = 0, double _b = 0) :a(_a), b(_b) {}
	void print() {cout << a << " " << b << endl;}
private:
	double a, b;
	friend Zespolona operator+(const Zespolona& l, const Zespolona& r);
};

Zespolona operator+(const Zespolona& l, const Zespolona& r)
{
	return Zespolona(l.a+r.a, l.b+r.b);
}

int main()
{
	Zespolona one(1,2), two(3,4);
	Zespolona three = one + two;
	three.print();
	system("pause");
	return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы