头文件 Vector.h
#include<iostream>
using namespace std;
class Vector
{
public:
enum Mode { RECT, POL };
Vector();
Vector(double n1, double n2, Mode form = RECT);
void reset(double n1, double n2, Mode form = RECT);
double xval() const { return x; }
double yval() const { return y; }
double magval() const { return mag; }
double angval() const { return ang; }
void polar_mode();
void rect_mode();
Vector operator+(const Vector& b) const;
Vector operator-(const Vector& b) const;
Vector operator-() const;
Vector operator*(double n) const;
friend Vector operator*(double n, Vector& b);
friend ostream& operator<<(ostream& os, const Vector& v);
private:
double x;
double y;
double mag;
double ang;
Mode mode;
void setx();
void sety();
void setmag();
void setang();
};
Vector.cpp
#include<iostream>
#include<string>
#include"vector.h"
using namespace std;
Vector::Vector() {
x = y = mag = ang = 0;
mode = RECT;
}
Vector::Vector(double n1, double n2, Mode form) {
if (form == RECT)
{
x = n1;
y = n2;
setmag();
setang();
}
if (form == POL)
{
mag = n1;
ang = n2;
setx();
sety();
}
}
void Vector::setmag() {
mag = sqrt(x * x + y * y);
}
void Vector::setang() {
if (x==0 && y==0)
{
ang = 0;
}
else
{
ang = atan2(y, x);
}
}
void Vector::setx() {
x = mag * cos(ang);
}
void Vector::sety() {
y = mag * sin(ang);
}
void Vector::polar_mode() {
mode = POL;
}
void Vector::rect_mode() {
mode = RECT;
}
Vector Vector::operator+(const Vector& b) const {
return Vector(x + b.x, y + b.y, RECT);
}
Vector Vector::operator-(const Vector& b) const {
return Vector(x - b.x, y - b.y, RECT);
}
Vector Vector::operator*(double n) const {
return Vector(n * x, n * y, RECT);
}
Vector operator*(double n, const Vector& b){
return b * n;
}
ostream& operator<<(ostream& os, const Vector& v) {
os << "x=" << v.x << " " << "y=" << v.y << endl;
os << "len=" << v.mag << " " << "ang=" << v.ang << endl;
return os;
}
测试
#include <iostream>
#include"vector.h"
int main()
{
std::cout << "Hello World!\n";
Vector v1 = Vector(3, 4, Vector::RECT);
Vector v2 = Vector(5, 6, Vector::RECT);
Vector v3 = v1 - v2;
cout << v3;
}