@bohdan-merk

Как описать перегрузку оператора умножения?

Есть программа для работы с массивами. Довольно простенькая. Задача программы: работа с обычными динамичными массивами плюс перегрузка некоторых операторов.

Многие операторы я уже сделал и их работа меня устраивает. Но остался оператор умножения (*) который не получается сделать. По условию задания, перегрузка оператора должна скалярно умножать два массива. Под этим подразумевается, например: массив1 - 3,2; массив2 - 5,1, скалярное умножение: 3*5 + 2*1 = 17. Но как то не получается это организовать.

Код возможно имеет множество каких либо ошибок, но главное работает, и если какие то ошибки уж слишком недопустимы, подскажите, какие и как стоит исправить.

Код под спойлером
#include <iostream>
using namespace std;
 
class LabArray
{
private:
    int* Array;
    int size;
public:
    LabArray()
    {
        Array = NULL;
        size = 0;
    }
    LabArray(int _size)
    {
        size = _size;
        Array = new int[size];
        for (int i = 0; i < size; i++)
            Array[i] = 0;
    }
    LabArray(const LabArray &obj)
    {
        size = obj.size;
        Array = new int[obj.size];
        for (int i = 0; i < size; i++)
            Array[i] = obj.Array[i];
    }
    ~LabArray() 
    { 
      delete[] Array; 
    }
 
    void PrintArray()
    {
        for (int i = 0; i < size; i++)
            cout << Array[i] << " ";
      cout << endl;
    }
 
    void SetArray()
    {
            for (int i = 0; i < size; i++)
            {
                cout << "Element #" << i+1 << ": ";
                cin >> Array[i];
            }
    }

    void ArraySum()
    {
      int sum = 0;
         for (int i = 0; i < size; i++) {
           sum = sum + Array[i];
         }
      cout << "Sum of array: " << sum << endl;
    }

    void ArraySort()
    {
      int temp; 
        for (int i = 0; i < size - 1; i++) {
            for (int j = 0; j < size - i - 1; j++) {
                if (Array[j] > Array[j + 1]) {
                    temp = Array[j];
                    Array[j] = Array[j + 1];
                    Array[j + 1] = temp;
                }
            }
        }
        cout << "Bubble-sorted array: ";
        for (int i = 0; i < size; i++) {
          cout << Array[i] << " ";
    }
    }

    LabArray operator+ (const LabArray& other) {
      LabArray Temp (size);
        for (int i = 0; i < size; i++) {
          Temp.Array[i] = Array[i] + other.Array[i];
        }
      return Temp;
    }

    LabArray operator- (const LabArray& other) {
      LabArray Temp (size);
        for (int i = 0; i < size; i++) {
          Temp.Array[i] = Array[i] - other.Array[i];
        }
      return Temp;
    }
// Not working
    LabArray operator* (const LabArray& other) {
      double sum = 0;
        for (int i = 0; i < size; ++i) {
          sum += Array[i] * other.Array[i];
        }
      return sum;
    }
//
    friend ostream & operator<<(ostream &out, const LabArray& other) {
      int size = other.size;
            for (int i = 0; i < size; i++)
            {
                out << other.Array[i] << " ";
            }
            return out;
        }

    friend istream& operator>> (std::istream &in, const LabArray& other) {
      int size = other.size;
            for (int i = 0; i < size; i++)
            {
                cout << "Element #" << i+1 << ": ";
                cin >> other.Array[i];
            }
            return in;
        }

    int& operator[] (const int index) {
      return Array[index];
}
};
 
int main()
{
    int size;
    cout << "Set a size of arrays: " << endl;
    cin >> size;
    // Set values with operator overload
    LabArray Arr1 (size);
    cin >> Arr1;
    LabArray Arr2 (size);
    cin >> Arr2;
    // Print values with operator overload
    cout << "Print your arrays: " << endl;
    cout << Arr1 << endl << Arr2 << endl;
    LabArray ArraysSum = Arr1 + Arr2;
    cout << "Result of adding two arrays: ";
    ArraysSum.PrintArray();
    LabArray ArraysMinus = Arr1 - Arr2;
    cout << "Result of minus two arrays: ";
    ArraysMinus.PrintArray();
    // Print value with [] operator overload
    cout << Arr1[1];
    LabArray ArraysScalar = Arr1 * Arr2;
    cout << "Result of scalar multiply two arrays: ";
    ArraysScalar.PrintArray();


Собственно кусок который не работает:
LabArray operator* (const LabArray& other) {
      double sum = 0;
        for (int i = 0; i < size; ++i) {
          sum += Array[i] * other.Array[i];
        }
      return sum;
    }
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
перегрузка оператора должна скалярно умножать два массива. Под этим подразумевается, например: массив1 - 3,2; массив2 - 5,1, скалярное умножение: 3*5 + 2*1 = 17

LabArray operator* (const LabArray& other) {
      double sum = 0;
        for (int i = 0; i < size; ++i) {
          sum += Array[i] * other.Array[i];
        }
      return sum;
    }

Если результатом должно быть число и возвращаешь ты double, то почему тип возвращаемого значения -- LabArray?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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