⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vector.cpp

📁 我学习C++ Primer Plus过程中写下的课后作业的编程代码
💻 CPP
字号:
// vect.cpp -- methods for Vector class
#include <cmath>
#include "vect.h"	// includes<iostream>
using namespace std;

namespace VECTOR
{
	const double Rad_to_deg = 57.2957795130823;
	
	// public methods
	Vector::Vector()		// default constructor
	{
		x = y =  0.0;
		mode = 'r';
	}
	
	// construct vector from rectangular coordinates if form is r
	// (the default) or else from polar coordinates if form is p 
	Vector::Vector (double n1, double n2, char form)
	{
		mode = form;
		if ( 'r' == form )
		{
			x = n1;
			y = n2;
		}
		else if ( 'p' == form )
		{
			x = n1 * cos ( n2 / Rad_to_deg );
			y = n1 * sin ( n2 / Rad_to_deg );
			
		}
		else
		{
			cout<< "Incorrect 3rd argument to Vector()-- ";
			cout<< "vector set to 0 \n";
			x = y =  0.0;
			mode = 'r';
		}
	}
	
	// set vector fromrectangular coordinates if flrm is r
	// (the default) or else from polar coordinates if form is p
	void Vector::set( double n1, double n2, char form)
	{
		mode = form;
		if ( 'r' == form )
		{
			x = n1;
			y = n2;
		}
		else if ( 'p' == form )
		{
			x = n1 * cos ( n2 / Rad_to_deg );
			y = n1 * sin ( n2 / Rad_to_deg );
		}
		else
		{
			cout<< "Incorrect 3rd argument to Vector()-- ";
			cout<< "vector set to 0 \n";
			x = y =  0.0;
			mode = 'r';
		}
	}
	
	Vector::~Vector()	// destructor
	{
	}
	
	double Vector::magval()const	// report magnitude
	{
		return sqrt ( x*x + y*y );
	}
	
	double Vector::angval()const	// report angle
	{
		if ( 0.0 == x && 0.0 == y )
			return 0.0;
		else
			return atan2 ( y, x );
	}
	
	void Vector::polar_mode()	// set to polar mode
	{
		mode = 'p';
	}
	
	void Vector::rect_mode()	// set to rectangular mode
	{
		mode = 'r';
	}
	
	// operator overloading
	// add two Vectors
	Vector Vector::operator + (const Vector & b)const
	{
		return Vector( x + b.x, y + b.y );
	}
	
	// subtract Vector b from a
	Vector Vector::operator - ( const Vector & b)const
	{
		return Vector ( x - b.x, y - b.y );
	}
	
	// reverse sign of Vecotr
	Vector Vector::operator -()const
	{
		return Vector ( -x, -y );
	}
	
	// multiple vector by n
	Vector Vector::operator * ( double n )const
	{
		return Vector ( n * x, n * y );
	}
	
	// friend methods
	// multiply n by Vector a
	Vector operator * ( double n , const Vector & a )
	{
		return a * n;
	}
	
	// display rectangular coordinates if mode if r,
	// else display polar coordinates if mode is p
	std::ostream & operator << ( std::ostream & os, const Vector & v )
	{
		if ( 'r' == v.mode )
			os <<"(x,y) = ("<<v.x<<", "<<v.y<<")";
		else if ( 'p' == v.mode )
		{
			os <<"(m,a) = ("<<v.magval()<<", "
				<<v.angval() * Rad_to_deg<<") ";
		}
		else
			os <<"Vector lbject mode is invalid";
		return os;
	}
} //end namespace VECTOR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -