Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / vector_class / vm1
.cpp#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "vm1.h"
MyNum::MyNum(int ns)
{
size = ns;
data = new int[size];
memset(data, 0, sizeof(int) * size);
}
MyNum::MyNum(const MyNum& mn)
{
size = mn.size;
data = new int[size];
if (data == NULL)
exit(1);
memcpy(data, mn.data, size * sizeof(int));
}
MyNum& MyNum::operator=(const MyNum& mn)
{
/* Убеждаемся, что не выполняется присваивание вида x=x;.
Если левая и правая части ссылаются на один объект, делать ничего не надо.
Если не перехватить этот особый случай, то следующий
шаг уничтожит значение до того, как оно будет скопировано. */
if (&mn == this) return *this;
delete [] data;
size = mn.size;
data = new int[size];
if (data == NULL)
{
exit(1);
}
memcpy(data, mn.data, sizeof(int) * size);
return *this;
}
MyNum::~MyNum()
{
delete [] data;
size = 0;
}
int& MyNum::operator[](int index) const
{
if (index < size && index >= 0)
return data[index];
else
{
printf("Index error\n");
exit(1);
}
}
MyNum::MyNum(int *arr, int array_size)
{
size = array_size;
data = new int[size];
if (data == NULL)
{
exit(1);
}
memcpy(data, arr, size * sizeof(int));
}
void MyNum::Show()
{
int i;
printf("(");
for (i = 0; i < size - 1; i++)
{
printf("%d, ", data[i]);
}
printf("%d)\n", data[size - 1]);
}
MyNum operator+(const MyNum& N1, const MyNum& N2)
{
int i;
if (N1.size != N2.size)
{
printf("Error adding arrays\n");
exit(1);
}
MyNum R(N1.size);
for (i = 0; i < N1.size; i++)
{
R.data[i] = N1.data[i] + N2.data[i];
}
return R;
}
MyNum operator-(const MyNum& N1, const MyNum& N2)
{
int i;
if (N1.size != N2.size)
{
printf("Error substracting arrays\n");
exit(1);
}
MyNum R(N1.size);
for (i = 0; i < N1.size; i++)
{
R.data[i] = N1.data[i] - N2.data[i];
}
return R;
}
int operator*(const MyNum& N1, const MyNum& N2)
{
int i, rezultat;
if (N1.size != N2.size)
{
printf("Error vecor proizvedenie length\n");
exit(1);
}
rezultat = 0;
for (i = 0; i < N1.size; i++)
{
rezultat += N1.data[i] * N2.data[i];
}
return rezultat;
}
MyNum operator*(const MyNum& N1, const int n2)
{
int i;
MyNum R(N1.size);
for (i = 0; i < N1.size; i++)
{
R.data[i] = N1.data[i] * n2;
}
return R;
}
MyNum operator*(const int n2, const MyNum& N1)
{
int i;
MyNum R(N1.size);
for (i = 0; i < N1.size; i++)
{
R.data[i] = N1.data[i] * n2;
}
return R;
}