Как перегрузить оператор + (дружественный), чтобы вы могли добавить значение элемента массива в поля объекта класса? - PullRequest
1 голос
/ 03 мая 2020

У меня есть класс. В этом классе 2 поля. У меня есть целочисленный массив. Моя задача - перегрузить дружественный оператор «+», чтобы можно было добавлять значения полей из массива со значениями элементов массива.

Например:

class Test {
public:
    double x, y;
    Test() {
       x = 0;
       y = 0;
    }
};

int main() {
    Test a;
    int arr[2] { 1, 2 };
    a = arr[0] + a;
    a.Show();

    return 0;
}

Я ожидаю следующих значений:

x = 1;
y = 1.

Как я могу перегрузить оператор + для выполнения этой задачи? У меня нет никаких мыслей по этому поводу.

Код интерфейса класса:

#include <iostream>
#include <fstream>
using namespace std;
class Pyramid {
public:
    double x, h, a; 
    Pyramid() {
        x = h = a = 3;
    }
    Pyramid(double p, double k, double q) {
        x = p;
        h = k;
        a = q;
    }
    Pyramid(const Pyramid& obj) {
        this->x = obj.x;
        this->h = obj.h;
        this->a = obj.a;
    }
    Pyramid& operator=(Pyramid& obj) {
        if (this != &obj) {
            this->x = obj.x;
            this->h = obj.h;
            this->a = obj.a;
        }
        return *this;
    }
    Pyramid operator+(const Pyramid& b) {
        Pyramid temp;
        temp.x = this->x + b.x;
        temp.h = this->h + b.h;
        temp.a = this->a + b.a;
        return temp;
    }
    Pyramid& operator*(int chislo) {
        this->x *= chislo;
        this->h *= chislo;
        this->a *= chislo;
        return *this;
    }
    Pyramid& operator++(int value) {
        this->x++;
        this->h++;
        this->a++;
        return *this;
    }
    ~Pyramid() {
    }
private:
    double Sb = 10;
};


int main() {
    setlocale(0, "");

    int arr[]{ 1,2,3,4,5 };
    Pyramid p2;
    p2 = arr[3] + p2;

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Операторы, не относящиеся к классу +, могут выглядеть как

Test operator +( const Test &t, double value )
{
    return { t.x + value, t.y + value };
}

Test operator +( double value, const Test &t )
{
    return { t.x + value, t.y + value };
}

При условии, что либо класс Test является агрегатом, либо имеет конструктор Test( double, double ).

0 голосов
/ 03 мая 2020

Кажется, вам нужно реализовать a = a + arr. В противном случае массив в примере не имеет смысла. Перегрузите дружественный оператор "+", чтобы можно было добавлять значения из массива к значениям полей класса.

Test operator+ (const Test& t, const int* values) {
  return { t.x + values[0], t.y + value[1] };
}

или

Test operator+ (const Test& t, const int (&values)[2]) {
  return { t.x + values[0], t.y + value[1] };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...