c++学习日记之使用类来模拟随机漫步
来源:互联网 发布:淘宝下载安装2017官方 编辑:程序博客网 时间:2024/04/25 00:21
本文主要介绍运算符重载和友元的类设计,通过定义一个矢量类来模拟随机漫步。矢量类分两种模式,直角坐标模式和极坐标模式。该函数允许用户选择行走的距离和补偿。该程序用一个变量表示位置,并报告到达指定距离住所需的部署。
本文的重点是是理解运算符重载和友元函数
代码如下:
vector.h文件
#ifndef VECTOR_H_#define VECTOR_H_#include<iostream>namespace VECTOR{class Vector{public:enum Mode{RECT,POL};// RECT for rectangular ,POL for ploar modesprivate:double x; // horizontal valuedouble y; // vertical valuedouble mag; // length of vectordouble ang; // direction of vector in degreesMode mode; //RECT or POL//private methods for setting valuesvoid set_mage();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;} //report x valuedouble yval() const {return y;} //report y valuedouble magval() const {return mag;}// report magnitudedouble angval() const {return ang;}//report anglevoid polar_mode(); //set mode to polvoid rect_mode(); // set mode to rect//operator overloadingVector operator + (const Vector &b) const;Vector operator - (const Vector &b) const;Vector operator * (double n) const;Vector operator - () const;//friendsfriend Vector operator * (double n,const Vector &a);friend std::ostream & operator <<(std::ostream & os,const Vector &v);};}#endif
vector.cpp文件
#include<cmath>#include"vector.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{const double Rad_to_deg = 45.0/atan(1.0);//should be about 57.2957795130823//private methods//calculates magnitude from x and yvoid Vector::set_mage(){mag=sqrt(x * x + y * y);}void Vector::set_ang(){if(x==0.0&&y==0.0)ang=0.0;elseang=atan2(y,x);}//set x,y from polar coordinatevoid Vector::set_x(){x=mag*cos(ang);}void Vector ::set_y(){y=mag*sin(ang);}//public methodsVector::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_mage();set_ang();}else if(form==POL){mag=n1;ang=n2;set_x();set_y();}else{cout << "incorrect 3rd argument to vector()---";cout << "vector set to 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_mage();set_ang();}else if(form==POL){mag=n1;ang=n2;set_x();set_y();}else{cout << "incorrect 3rd argument to vector()---";cout << "vector set to 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.y);}Vector Vector::operator*(double n) const{return Vector(n*x,n*y);}Vector Vector::operator - () const{return Vector(-x,-y);}Vector operator *(double n,const Vector &a){return a*n;}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 << ")";}elseos << "Vector object maod is invalid";return os;}}
main()函数
#include <iostream>#include <cstdlib>#include<ctime>#include "vector.h"int main(){using namespace std;using VECTOR::Vector;srand(time(0));double direction;Vector step;Vector result(0.0,0.0);unsigned long steps=0;double target;double dstep;cout << "enter target distance (q to quit)";while (cin >> target){cout << "enter step length:";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(q to quit):";}cout << "byte\n";cin.clear();while(cin.get()!='\n')continue;return 0 ;}
运行结果如下:
0 0
- c++学习日记之使用类来模拟随机漫步
- 随机漫步模拟
- 使用Vector类来模拟随机行走
- 使用类:vector类来模拟随机行走
- “随机漫步”(Random Walk)模拟演示
- 随机漫步
- python 数据可视化 matplotlib学习三:生成随机漫步数据并使用matplotlib呈现
- C++学习日记之队列模拟
- 第4章-1 一次模拟多个随机漫步
- python数据可视化——散点图实例之随机漫步
- 使用Python的matplotlib库生成随机漫步图
- 随机漫步理论
- 随机漫步Random Walks
- 随机漫步(random walk)
- matplotlib-随机漫步
- python实现随机漫步
- java学习日记_12:面向对象之如何使用类
- 再谈重载:一个矢量类(随机漫步)
- MySQL基础知识
- linux 常用命令2
- android:gravity / android:layout_Gravity,android:padding / android:layout_margin属性区分
- Ubuntu下安装VNC server
- ASP.NET MVC 部分视图
- c++学习日记之使用类来模拟随机漫步
- 大数据理解
- 智联招聘中申请职位之后你根本不知道你申请的职位是啥,而且不想说...
- Java的23种设计模式详解
- Spring框架中的Aop是做什么用的?
- php设置session生存时间
- orale的学习历程
- 收藏
- 使用Handler对象引发空指针错误