写一个蠢到爆的vector类(c++)

原谅我在大佬云集的地方撒野。。。。我只是很快乐而已。。。

//
// Created by lenovo on 2018/3/25.
//

#ifndef VECTOR_VECTOR_H
#define VECTOR_VECTOR_H

#include <iostream>
class vector{
public:
    enum Mode{RECT,POL};//RECT for rectangular,POL for polar modes
private:
    double x;
    double y;
    double mag;
    double ang;
    Mode mode;
    void set_mag();
    void set_ang();
    void set_x();
    void set_y();
public:
    vector();
    vector(double n1,double n2,Mode form=RECT);
    void reset(double n1,double n2,Mode form=RECT);
    ~vector();
    double xval() const{return x;}
    double yval() const{return y;}
    double magval() const{return mag;}//magnitude
    double angval() const{return ang;}//angle
    void polar_mode();//set mode to pol
    void rect_mode();//set mode to RECT
    //operation
    vector operator+(const vector &b) const;
    vector operator-(const vector &b) const;
    vector operator-() const;
    vector operator*(double n) const;

    friend std::ostream &operator<<(std::ostream &os, const vector &v);
};
#endif //VECTOR_VECTOR_H

。。。。。。

//
// Created by lenovo on 2018/3/25.
//

#include <iostream>
#include "vector.h"
#include <cmath>
using namespace std;

const double Rad_to_deg=45.0/atan(1.0);
void vector::set_mag() {
    mag=sqrt(x*x+y*y);
}

void vector::set_ang() {
    if(x==0.0 && y==0.0)
        ang=0.0;
    else
        ang=atan2(y,x);
}

void vector::set_x() {
    x=mag*cos(ang);
}

void vector::set_y() {
    y=mag*sin(ang);
}

vector::vector() {
    x=y=mag=ang=0.0;
    mode=RECT;
}

vector::vector(double n1, double n2, Mode form) {
    mode=form;
    if(form==RECT){
        x=n1;
        y=n2;
        set_mag();
        set_ang();
    }
    else if(form==POL){
        mag=n1;
        ang=n2/Rad_to_deg;
        set_x();
        set_y();
    }
    else{
        cout<<"Incorrect arguments. vector set to 0.0\n";
        x=y=mag=ang=0.0;
        mode=RECT;
    }
}

void vector::reset(double n1, double n2, Mode form) {
    mode=form;
    if(form==RECT){
        x=n1;
        y=n2;
        set_mag();
        set_ang();
    }
    else if(form==POL){
        mag=n1;
        ang=n2/Rad_to_deg;
        set_x();
        set_y();
    }
    else{
        cout<<"Incorrect arguments. vector set to 0.0\n";
        x=y=mag=ang=0.0;
        mode=RECT;
    }
}

vector::~vector() {
}

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);//使用构造函数
}

vector vector::operator-(const vector &b) const {
    return vector(x-b.x,y-b.x);
}

vector vector::operator-() const {
    return vector(-x,-y);
}

vector vector::operator*(double n) const {
    return vector(n*x,n*y);
}

std::ostream &operator<<(std::ostream &os,const vector &v){
    if(v.mode==vector::RECT)
        os<<"(x,y) = ("<<v.x<<" , "<<v.y<<" )";
    else if(v.mode==vector::POL){
        os<<"(m,a)=("<<v.mag<<"," <<v.ang*Rad_to_deg<<")";
    }
    else
        os<<"Vectorobjectmodeisinvalid";
    return os;

}


#include <iostream>
#include "vector.h"
#include <cstdlib>
#include <ctime>

int main()
{
    using namespace std;

    srand(time(0));
    double direction;
    vector step;
    vector result(0.0,0.0);
    unsigned long steps=0;
    double target;
    double dstep;
    cout<<"Enter the target distance: ";
    while(cin>>target){
        cout<<"Enter step lengh: ";
        if(!(cin>>dstep))
            break;
        while(result.magval()<target){
            direction=rand()%360;
            step.reset(dstep,direction,vector::POL);
            result=result+step;
            steps++;
        }
        cout<<"After "<<steps<<" steps, the subject has the following location:\n";
        cout<<result<<endl;
        result.polar_mode();
        cout<<"or\n"<<result<<endl;
        cout<<"Average outward distance per step = "
            <<result.magval()/steps<<endl;
        steps=0;
        result.reset(0.0,0.0);
        cout<<"Enter target distance :";
    }
    cout<<"Bye\n";
    cin.clear();
    while(cin.get()!='\n')
        continue;
    return 0;
}
 
 

我觉得很多人都看得懂,哦不是,没有人看,所以我都没写注释,需要的可以私戳我。。。


猜你喜欢

转载自blog.csdn.net/billy1900/article/details/80042884