Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
02.05.2014
Размер:
2.66 Кб
Скачать
#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;
}
Соседние файлы в папке vector_class