Есть программа для работы с массивами. Довольно простенькая. Задача программы: работа с обычными динамичными массивами плюс перегрузка некоторых операторов.
Многие операторы я уже сделал и их работа меня устраивает. Но остался оператор умножения (*) который не получается сделать. По условию задания, перегрузка оператора должна скалярно умножать два массива. Под этим подразумевается, например: массив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;
}