本文章是作者根据史蒂芬·普拉达所著的《C++ Primer Plus》而整理出的读书笔记,如果您在浏览过程中发现了什么错误,烦请告知。另外,此书由浅入深,非常适合有C语言基础的人学习,感兴趣的朋友可以自行阅读此书籍。
矢量,是工程和物理中使用的一个术语,它是一个有大小和方向的量。例如,推东西时,推的效果将取决于推力的大小和推的方向。
同时,矢量也支持相加,首先,画一个矢量,然后从第一个矢量的尾部开始画第二个矢量。最后从第一个矢量的开始处向第二个矢量的结尾处画一个矢量。第三个矢量表示前两个矢量的和。注意,两个矢量之和的长度可能小于它们的长度之和。
显然无法使用一个数来表示矢量,因此应创建一个类来表示矢量。其次,矢量与普通数学运算有相似之处,因此应重载运算符。
出于简化的目的,本节将实现一个二维矢量(如屏幕位移)。描述二维矢量只需要两个数,但可以选择到底使用哪两个数:
- 可以用大小(长度)和方向(角度)描述矢量;
- 可以用分量x和y表示矢量。
两个分量分别是水平矢量(x分量)和垂直矢量(y分量),将其相加可以得到最终的矢量。例如,可以这样描述点的运动:向右移动30个单位,再向上移动40个单位。这将把该点沿与水平方向呈53.1度的方向移动50个单位(没错,就是勾股定理),因此,水平分量为30个单位、垂直分量为40个单位的矢量,与长度为50个单位、方向为53.1度的矢量相同。
因此在设计这个类时,当用户修改了矢量的一种表示时,对象将自动更新另一种表示。
以下是类声明的代码:
//vect.hpp
#ifndef _VECTOR_H_
#define _VECTOR_H_
#include <iostream>
namespace VECTOR
{
class Vector
{
public:
enum Mode{RECT, POL};
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