第11章 使用类——再谈重载:矢量类(二)

本文章是作者根据史蒂芬·普拉达所著的《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-()有两种不同的定义,是因为它们的特征标不同。需要注意的是,对于只有二元形式的运算符(如除法运算符),只能将其重载为二元运算符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值