smpl_vector.cpp
// Programmer: Josh Santomieri
// http://www.santsys.com
// Example of simple 2 point vector class with operator overides

#include 
#include 

template
class CVect
{
public:
	CVect();
	CVect(T x, T y, T z);
	~CVect();

	void SetVect(T x, T y, T z);
	void SetVectX(T x);
	void SetVectY(T y);
	void SetVectZ(T z);
	void PrintVect();
	double Distance(CVect V1);

	CVect operator+(CVect &V1);
	CVect operator-(CVect &V1);
	CVect operator*(CVect &V1);
	CVect operator/(CVect &V1);
	int operator==(CVect &V1);
	int operator!=(CVect &V1);

private:
	T x;
	T y;
	T z;
};

template
CVect::CVect()
{
}

template
CVect::CVect(T x, T y, T z)
{
	CVect::x = x;
	CVect::y = y;
	CVect::z = z;
}

template
CVect::~CVect()
{
}

template
void CVect::SetVect(T x = 0, T y = 0, T z = 0)
{
	CVect::x = x;
	CVect::y = y;
	CVect::z = z;
}

template
void CVect::PrintVect()
{
	cout << "(" << CVect::x << ", " << CVect::y << ", " << CVect::z << ")" <
void CVect::SetVectX(T x)
{
	CVect::x = x;
}

template
void CVect::SetVectY(T y)
{
	CVect::y = y;
}

template
void CVect::SetVectZ(T z)
{
	CVect::z = z;
}

template
double CVect::Distance(CVect V1)
{
	double dDist = 0.0;

	dDist = (sqrt((pow((CVect::x - V1.x), 2) + pow((CVect::y - V1.y), 2)) + pow((CVect::z - V1.z), 2)));

	return dDist;
}

template
CVect CVect::operator+(CVect &V1)
{
	CVect temp;
	temp.x = CVect::x + V1.x;
	temp.y = CVect::y + V1.y;
	temp.z = CVect::z + V1.z;

	return temp;
}

template
CVect CVect::operator-(CVect &V1)
{
	CVect temp;
	temp.x = CVect::x - V1.x;
	temp.y = CVect::y - V1.y;
	temp.z = CVect::z - V1.z;

	return temp;
}

template
CVect CVect::operator*(CVect &V1)
{
	CVect temp;
	temp.x = CVect::x * V1.x;
	temp.y = CVect::y * V1.y;
	temp.z = CVect::z * V1.z;

	return temp;
}

template
CVect CVect::operator/(CVect &V1)
{
	CVect temp;

	if((V1.x == 0) || (V1.y == 0) || (V1.z == 0))
		return NULL;
	else
	{
		temp.x = CVect::x / V1.x;
		temp.y = CVect::y / V1.y;
		temp.z = CVect::z / V1.z;
	}

	return temp;
}

template
int CVect::operator==(CVect &V1)
{
	return ((CVect::x == V1.x) && (CVect::y == V1.y) && (CVect::z == V1.z));
}

template
int CVect::operator!=(CVect &V1)
{
	return ((CVect::x != V1.x) || (CVect::y != V1.y) || (CVect::z == V1.z));
}

int main(int argc, char **argv)
{
	CVect cv(1,2,3);
	CVect cv1(3,4,5);
	CVect cvd(1.1, 1.2, 1.3);
	CVect cvd1(1.1, 2.2, 3.3);

	cvd.PrintVect();
	cv.PrintVect();
	cv1.PrintVect();

	cv = cv + cv1;
	cv.PrintVect();
	cvd = cvd + cvd1;
	cvd.PrintVect();

	cout << "distance (cv, cv1): " << cv.Distance(cv1) << endl;

	return 0;
}