I have this code of overloaded operator for vectors class, which is a class of vector of dimension 3:
class Vectors
{
//private:
// double* vector;
public:
double* vector;
Vectors(double*);
Vectors();
Vectors(const Vectors&);
~Vectors();
void print_vector();
};
Class Methods: Constructors:
Vectors::Vectors(double* value)
{
this->vector = new double[3];
for (auto i = 0; i < 3; i++)
{
this->vector[i] = value[i];
}
}
Vectors::Vectors()
{
this->vector = new double[3];
for (auto i = 0; i < 3; i++)
{
this->vector[i] = 0.0;
}
}
Copy Constructors:
Vectors::Vectors(const Vectors& copy)
{
this->vector = new double[3];
for (auto i = 0; i < 3; i++)
{
this->vector[i] = copy.vector[i];
}
}
Destructor:
Vectors::~Vectors()
{
//cout << "desctructor called \n";
delete[] vector;
}
void Vectors::print_vector(){
for (int i=0; i<3 ;i++){
cout << this->vector[i];
cout << '\t';
}
cout << endl;
}
Overloaded Operator:
Vectors operator+(const Vectors& obj1,const Vectors& obj2)
{
Vectors *res = new Vectors;
for (int i = 0; i < 3; i++){
//cout << obj1.vector[i] << '\t' << obj2.vector[i] << '\t' << obj1.vector[i] + obj2.vector[i] << endl;
res->vector[i] = obj1.vector[i] + obj2.vector[i];
//cout << res->vector[i] << endl;
}
//res->print_vector();
return *res;
}
int main()
{
double a[3] = {3.5,4.10,5.30};
double b[3] = {7.0,8.0,9.0};
Vectors* A = new Vectors(a);
Vectors* B = new Vectors(b);
Vectors* C = new Vectors();
*C = *A+*B; // This does not work
(*A+*B).print_vector(); // This works
C->print_vector();
Vectors D = *A+*B; // This works
D.print_vector();
}
When creating a pointer to an object Vectors, I get different results when compared to creating direct objects.
Output is: 1st Output: 0 4.68558e-310 14.3 2nd Output: 10.5 12.1 14.3 3rd Output: 10.5 12.1 14.3