#include <iostream>
#include <cstring>
using namespace std;
const int Nsize = 51;
char Add[Nsize] = "temp0", Multi1[Nsize] = "mul10", Multi2[Nsize] = "mul20";
class vec3 {
private: double x, y, z; char name[Nsize];
public:
vec3(const char *desc, double x = 0, double y = 0, double z = 0) : x(x), y(y), z(z)
{strncpy_s(name, Nsize, desc, Nsize);
cout << "[Con] for " << (*this).name << "(" << this->x <<
", " << this->y << ", " << this->z << ")\n\n";
}
/* vec3(vec3& obj)
{ strncpy_s(name, Nsize, "Cpycon", Nsize);
this->x = obj.x; this->y = obj.y; this->z = obj.z;
cout << "[CopyC]" << name << "(" << x << ", " << y << ", " << z <<
" copied from" << obj.name<<"(" << obj.x << ", " << obj.y << ", " << obj.z << ")\n\n";
}*/
vec3 operator+(const vec3& rhs)
{ vec3 sum(name, 0, 0, 0);
strncpy_s(sum.name, Nsize, Add, Nsize);
Add[4]++;
sum.x = x + rhs.x; sum.y = y + rhs.y; sum.z = z + rhs.z;
cout << " [Op+] for " << this->name << "(" << this->x <<
", " << this->y << ", " << this->z << ")\n\n";
return (sum ); }
vec3 operator*(double k) const
{ vec3 mul1(name, 0, 0, 0);
strncpy_s(mul1.name, Nsize, Multi1, Nsize);
Multi1[4]++;
mul1.x = k * x; mul1.y = k * y; mul1.z = k * z;
cout << " [Op1*] for " << this->name << "(" << this->x <<
", " << this->y << ", " << this->z << ")\n\n";
return mul1; }
};
/*vec3 operator*(double k, const vec3& rhs)
{ return rhs * k; }
vec3 operator*(double k, const vec3& rhs)
{ vec3 mul2(char name[Nsize], 0, 0, 0);
strncpy_s(mul2.name, Nsize, Multi2, Nsize);
Multi1[4]++;
mul2.x = k * x; mul2.y = k * y; mul2.z = k * z;
cout << " [Op1*] for " << this->name << "(" << this->x <<
", " << this->y << ", " << this->z << ")\n\n";
return mul2; }*/
/*ostream& operator<<(ostream& os, const vec3& v)
{ return os << "(" << v.name << v.x << " " << v.y << " " << v.z << ")"; }*/int main()
{ double t = 2.0;
vec3 r0("r0", 1, 2, 3),
v0("v0", 2, 3, 4),
a("a", 1, 1, 1);
vec3 r = r0 +
v0*t +
a * ( t * t * 0.5)
;
//cout << "r = " << r << endl;
return 0;
}