本文章是作者根据史蒂芬·普拉达所著的《C++ Primer Plus》而整理出的读书笔记,如果您在浏览过程中发现了什么错误,烦请告知。另外,此书由浅入深,非常适合有C语言基础的人学习,感兴趣的朋友可以自行阅读此书籍。
上节我们实现了个矢量类,这节我们主要对其中使用的C++技术做些说明。
矢量类的说明
使用状态成员
Vector类储存了矢量的直角坐标和极坐标。它使用名为mode的成员来控制使用的构造函数、reset()方法和重载的operator<<()函数使用哪种形式,其中枚举RECT表示直角坐标模式、POL表示极坐标模式。这样的成员被称为状态成员,因为这种成员描述的是对象所处的状态。以构造函数为例:
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 3rd argument to Vector() --";
cout << "vector set to 0\n";
x = y = mag = ang = 0.0;
mode = RECT;
}
}
如果第三个参数是RECT或省略了,则将输入解释为直角坐标;如果为POL,则将解释为极坐标。
我们可以在main函数中,使用VECTOR::vector::RECT或者VECTOR::vector::POL来决定输入参数的含义。枚举类型定义在公有部分,因此可以使用如下的语句来创建对象:
Vector foolery(20.0, 30.0, VECTOR::Vector::POL);
为Vector类重载算数运算符
我们在Vector类中重载了两次operator-(),那是因为,在C++中,-运算符已经有两种含义。首先,使用两个操作数,它是减法运算符。减法运算符是一个二元运算符,因为它有两个操作数。其次,使用一个操作数时(如-x),它时负号运算符。这种形式被称为一元运算符。首先是第一个,减法运算符重载:
Vector Vector::operator-(const Vector& b) const
{
return Vector(x - b.x, y - b.y);
}
对于直角坐标而言,将x、y分量分别相减即可。
再看第二个,负号运算符重载:
Vector Vector::operator-() const
{
return Vector(-x, -y);
}
它只使用了一个操作数,假设为:
Vector vc(30.0, 40.0);
则取负号后为
(-30.0,-40.0),
函数重载指的是函数名称相同,特征标不同(参数列表不同)的函数。operator-()有两种不同的定义,是因为它们的特征标不同。需要注意的是,对于只有二元形式的运算符(如除法运算符),只能将其重载为二元运算符。
标签:11,set,再谈,运算符,operator,Vector,使用,重载 From: https://www.cnblogs.com/superbmc/p/18117958