#include #include "Field.h" using std::cout; using std::endl; /** * Constructor: creates a field of size N. */ Field::Field (unsigned int N) { if (N == 0) { cout << "Error: size must be greater than zero." << endl; exit(-1); } size = N; data = new double[size]; } /** * Copy Constructor */ Field::Field (const Field& F) { size = F.size; data = new double[size]; for (unsigned int i = 0; i < size; i++) data[i] = F.data[i]; } /** * Destructor */ Field::~Field () { delete[] data; } /** * Assignment operator */ Field& Field::operator= (const Field& F) { if (F.size != size) { delete[] data; size = F.size; data = new double[size]; } for (unsigned int i = 0; i < size; i++) data[i] = F.data[i]; return *this; } /** * Array-index operator */ double& Field::operator[] (const unsigned int index) { if (index >= size) { cout << "Error: index out of range." << endl; exit(-1); } return data[index]; } /** * Comparison operators */ bool Field::operator== (const Field& F) { if (F.size != size) { return false; } for (unsigned int i = 0; i < size; ++i) { if (F.data[i] != data[i]) { return false; } } return true; } bool Field::operator!= (const Field& F) { return !operator==(F); } /** * Arithmetic operators */ Field Field::operator+ (const Field& F) { if (F.size != size) { cout << "Error: fields are of different sizes." << endl; exit(-1); } Field T = *this; for (unsigned int i = 0; i < size; ++i) { T[i] += F.data[i]; } return T; } Field Field::operator- (const Field& F) { if (F.size != size) { cout << "Error: fields are of different sizes." << endl; exit(-1); } Field T = *this; for (unsigned int i = 0; i < size; ++i) { T[i] -= F.data[i]; } return T; } Field Field::operator* (const double& d) { Field T = *this; for (unsigned int i = 0; i < size; ++i) { T[i] *= d; } return T; } Field Field::operator/ (const double& d) { Field T = *this; for (unsigned int i = 0; i < size; ++i) { T[i] /= d; } return T; } /** * Prints this Field as a column vector */ void Field::print() { for (unsigned int i = 0; i < size; ++i) { cout << data[i] << endl; } }