Tuple1 = tuple2 + tuple3 //This would give an error
The error states
1>g:\tuplemain.cpp(21) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'double *' (or there is no acceptable conversion)
So my question is, How would i go about overloading the assignment operator where i can do an assignment
of both the left and the right hand side.
This is the header file, Tuple.h
namespace math { class Tuple { public: Tuple(); Tuple(int size); Tuple(double[],int); Tuple(const Tuple&); double getTupleSize(); void setTupleSize(); double* operator +(const Tuple&); double* operator -(const Tuple&); double* operator /(const double); double* operator * (const Tuple&); double* operator * (const double); Tuple operator =(const Tuple&); bool operator !=(const Tuple&); bool operator ==(const Tuple&); double& operator[](int i); const double& operator[](const int& i)const; const Tuple operator [](const Tuple&)const; Tuple* operator *= (const Tuple&); Tuple* operator /=(const Tuple&); double length(const Tuple&)const; double dot(const Tuple&)const; double* additiveInverse()const; void printTuple(); class SizeMisMatch{}; class OutOfBounds{}; private: unsigned int size; double *tuplePtr; double *result; }; }
This is Tuple.cpp
#include "Tuple.h" #include<iostream> #include<cmath> using namespace std; using math::Tuple; Tuple::Tuple():size(0) { tuplePtr = new(nothrow) double[size]; for(unsigned int i = 0; i< size; i++) { tuplePtr[i] = 0; } } Tuple::Tuple(int size) { this->size = size - 1; tuplePtr = new(nothrow) double[size]; result = new double[size]; for(int i = 0; i< size; i++) { tuplePtr[i] = 0; } } Tuple::Tuple(double temp[], int size) { this->size = size; //It's one less because arrays start at slot zero tuplePtr = new(nothrow) double[size]; result = new double[size]; for(int i = 0; i< size; i++) { tuplePtr[i] = temp[i]; } } Tuple::Tuple(const Tuple&x):tuplePtr(x.tuplePtr), size(x.size){} double Tuple::getTupleSize() { return size; } Tuple Tuple::operator =(const math::Tuple &x) { tuplePtr = x.tuplePtr; size = x.size; return *this; } double& Tuple::operator [](int i) { if((unsigned) i > size-1) throw OutOfBounds(); return tuplePtr[i]; } const double& Tuple::operator[](const int& i)const { return tuplePtr[i]; } double *Tuple::operator +(const Tuple& x) { double xSize = x.size; if(size == xSize) { for(unsigned int i = 0; i<size; i++) { result[i] = tuplePtr[i] + x.tuplePtr[i]; } } else throw SizeMisMatch(); return result; } double *Tuple::operator -(const Tuple& x) { double xSize = x.size; if(size == xSize) { for(unsigned int i = 0; i<size; i++) { result[i] = tuplePtr[i] - x.tuplePtr[i]; } } else throw SizeMisMatch(); return result; } double* Tuple::operator /(const double x) { for(unsigned int i = 0; i<size; i++) { result[i] = tuplePtr[i] / x; } return result; } double* Tuple::operator *(const double x) { for(unsigned int i = 0; i<size; i++) { result[i] = tuplePtr[i] * x; } return result; } bool Tuple::operator!=(const Tuple&x) { if(size != x.size) return true; return false; } double Tuple::dot(const Tuple& x)const { double xSize = size; double dotProd = 0; if(size == xSize) { for(unsigned int i = 0; i<size; i++) { dotProd += tuplePtr[i] * x.tuplePtr[i]; } } else throw SizeMisMatch(); return dotProd; } double Tuple::length(const Tuple& x)const { return sqrt(dot(x)); } void Tuple::printTuple() { cout <<"[ "; for(unsigned int i = 0; i<size; i++) { cout << tuplePtr[i] <<" "; } cout <<"]"; cout <<endl; }