~cpp
#include <iostream>
using namespace std;
#include <cmath>
class CVector
{
private:
double cx, cy, cz;
public:
CVector();
CVector(double x, double y, double z);
void SetVector(double x, double y, double z);
CVector operator+(CVector v);
CVector operator-(CVector v);
CVector operator*(double s);
CVector operator*(CVector v);
double operator^(CVector v);
void Normalize();
double Length();
double GetX();
double GetY();
double GetZ();
void ShowVector();
};
int main()
{
CVector v1(10, 20, 30);
CVector v2(50, 60, 70);
CVector v3;
cout << "v1 : ";
v1.ShowVector();
cout << "v2 : ";
v2.ShowVector();
v3 = v1 + v2;
cout << "v1 + v2 : ";
v3.ShowVector();
v3 = v1 - v2;
cout << "v1 - v2 : ";
v3.ShowVector();
v3 = v1 * 5;
cout << "v1 * 5 : ";
v3.ShowVector();
v3 = v1 * v2;
cout << "v1과 v2의 외적 : ";
v3.ShowVector();
cout << "v1과 v2의 내적 : " << (v1 ^ v2) << endl;
cout << "v1의 길이 : " << v1.Length() << endl;
v1.Normalize();
cout << "v1의 초기화 : ";
v1.ShowVector();
return 0;
}
CVector::CVector()
{
cx = cy = cz = 0;
}
CVector::CVector(double x, double y, double z)
{
SetVector(x, y, z);
}
void CVector::SetVector(double x, double y, double z)
{
cx = x;
cy = y;
cz = z;
}
CVector CVector::operator+(CVector v)
{
CVector temp(cx + v.GetX(), cy + v.GetY(), cz + v.GetZ());
return temp;
}
CVector CVector::operator-(CVector v)
{
CVector temp;
temp.SetVector(cx - v.GetX(), cy - v.GetY(), cz - v.GetZ());
return temp;
}
CVector CVector::operator*(double s)
{
CVector temp(cx * s, cy * s, cz * s);
return temp;
}
CVector CVector::operator*(CVector v)
{
CVector temp(cy * v.GetZ() - cz * v.GetY(), cz * v.GetX() - cx * v.GetZ(), cx * v.GetY() - cy * v.GetX());
return temp;
}
double CVector::operator^(CVector v)
{
return cx * v.GetX() + cy * v.GetY() + cz * v.GetZ();
}
void CVector::Normalize()
{
cx = cy = cz = 1;
}
double CVector::Length()
{
return sqrt(cx * cx + cy * cy + cz * cz);
}
double CVector::GetX()
{
return cx;
}
double CVector::GetY()
{
return cy;
}
double CVector::GetZ()
{
return cz;
}
void CVector::ShowVector()
{
cout << "x = " << cx << ", y = " << cy << ", z = " << cz << endl;
}
진짜 잘하네요.. _ 단한개를 지적하자면 스칼라값을 곱할때 v3 = 5 * v1; 이 안된다는것 정도겠네요... 이런건 friend함수를 한개정도 더 만들어주면 됩니다.
수정판 2번째 ¶
~cpp
#include <iostream>
using namespace std;
#include <cmath>
class CVector
{
private:
double cx, cy, cz;
public:
CVector();
CVector(double x, double y, double z);
void SetVector(double x, double y, double z);
CVector operator+(CVector v);
CVector operator-(CVector v);
CVector operator*(double s);
CVector operator*(CVector v);
double operator^(CVector v);
void Normalize();
double Length();
friend CVector operator*(double s, CVector v);
friend ostream & operator<<(ostream & os, CVector v);
};
int main()
{
CVector v1;
v1.SetVector(10, 20, 30);
CVector v2(50, 60, 70);
CVector v3;
cout << "v1 : " << v1 << endl;
cout << "v2 : " << v2 << endl;
v3 = v1 + v2;
cout << "v1 + v2 : " << v3 << endl;
cout << "v1 - v2 : " << v1 - v2 << endl;
cout << "v1 * 5 : " << v1 * 5 << endl;
cout << "5 * v1 : " << 5 * v1 << endl;
cout << "v1과 v2의 외적 : " << v1 * v2 << endl;
cout << "v1과 v2의 내적 : " << (v1 ^ v2) << endl;
cout << "v1의 길이 : " << v1.Length() << endl;
v1.Normalize();
cout << "v1의 초기화 : " << v1 << endl;
return 0;
}
CVector::CVector()
{
cx = cy = cz = 0;
}
CVector::CVector(double x, double y, double z)
{
SetVector(x, y, z);
}
void CVector::SetVector(double x, double y, double z)
{
cx = x;
cy = y;
cz = z;
}
CVector CVector::operator+(CVector v)
{
return CVector(cx + v.cx, cy + v.cy, cz + v.cz);
}
CVector CVector::operator-(CVector v)
{
return CVector(cx - v.cx, cy - v.cy, cz - v.cz);
}
CVector CVector::operator*(double s)
{
return CVector(cx * s, cy * s, cz * s);
}
CVector CVector::operator*(CVector v)
{
return CVector(cy * v.cz - cz * v.cy, cz * v.cx - cx * v.cz, cx * v.cy - cy * v.cx);
}
double CVector::operator^(CVector v)
{
return cx * v.cx + cy * v.cy + cz * v.cz;
}
void CVector::Normalize()
{
cx = cy = cz = 1;
}
double CVector::Length()
{
return sqrt(cx * cx + cy * cy + cz * cz);
}
CVector operator*(double s, CVector v)
{
return v * s;
}
ostream & operator<<(ostream & os, CVector v)
{
os << "x = " << v.cx << ", y = " << v.cy << ", z = " << v.cz;
return os;
}