- 연산자 오버로딩과 생성자, 소멸자, 복사 생성자에 대해 복습하고, 실습을 하였습니다.
역시 실습을 하니까 오래 걸리네요
- 벡터 클래스를 만들고
- 덧셈과 뺄셈 (오버로딩 +, -)
- 내적과 외적 (오버로딩 *. /)
- 사잇각, 길이 구하기 등을 구현했습니다. (오버로딩 %)
#include<iostream>
#define _USE_MATH_DEFINES
#include<cmath>
class Vector {
double x;
double y;
public :
Vector() {
this->x = 0.0;
this->y = 0.0;
}
Vector(double x, double y) {
this->x = x;
this->y = y;
}
double operator*(Vector& v2) {
return ((this->x * v2.x) + (this->y * v2.y));
}
Vector operator+(Vector& v2) {
Vector returnVector;
returnVector.x = this->x + v2.x;
returnVector.y = this->y + v2.y;
return returnVector;
}
Vector operator-(Vector& v2) {
Vector returnVector;
returnVector.x = this->x - v2.x;
returnVector.y = this->y - v2.y;
return returnVector;
}
double length() {
return sqrt(this->x * this->x + this->y * this->y);
}
double operator%(Vector& v2) {
return acos( (*this * v2) / ( abs( this->length() ) * abs( v2.length() ) ) );
}
double operator/(Vector& v2) {
return (this->length() * v2.length()) * sin(*this % v2);
}
void operator+=(Vector& v2) {
Vector temp;
temp.x = this->x + v2.x;
temp.y = this->y + v2.y;
this->x = temp.x;
this->y = temp.y;
}
void operator-=(Vector& v2) {
Vector temp;
temp.x = this->x - v2.x;
temp.y = this->y - v2.y;
this->x = temp.x;
this->y = temp.y;
}
double getX() {
return this->x;
}
double getY() {
return this->y;
}
};
#include"operatorOverloading.cpp"
#define PI 3.1415923
using namespace std;
#ifndef __OVERLOAD__
#include <iostream>
#endif
int main() {
Vector v1(3, 3);
Vector v2(3, 0);
cout << "Vector 1 : " << "(" << v1.getX() << ", " << v1.getY() << ")" << endl;
cout << "Vector 2 : " << "(" << v2.getX() << ", " << v2.getY() << ")" << endl;
Vector v3;
cout << "Vector 1's length : " << v1.length() << endl;
cout << "Vector 2's length : " << v2.length() << endl;
v3 = v1 + v2;
cout << "덧셈 : " << "(" << v3.getX() << ", " << v3.getY() << ")" << endl;
v3 = v1 - v2;
cout << "뺄셈 : " << "(" << v3.getX() << ", " << v3.getY() << ")" << endl;
cout << "각도 : " << (v1 % v2) * 180 / PI << endl;
cout << "외적 : " << v1 / v2 << endl;
cout << "내적 : " << v1 * v2 << endl;
v1 += v2;
cout << "+= 결과 : " << endl;
cout << "Vector 1 : " << "(" << v1.getX() << ", " << v1.getY() << ")" << endl;
v1 -= v2;
cout << "-= 결과 : " << endl;
cout << "Vector 1 : " << "(" << v1.getX() << ", " << v1.getY() << ")" << endl;
return 0;
}
- 기타
- cmath의 define 된 상수들을 사용하려면 _USE_MATH_DEFINES를 cmath의 include 전에 define 해주어야 함.