重载[]运算符并引用对象本身

时间:2015-05-19 10:20:10

标签: c++ operator-overloading

我需要在类体内的方法中引用每个顶点。我已尝试使用this->Solid::等,但这种情况也不顺利。

无论如何,我已经把其他所有东西都重载了,但我无法弄明白,也无法在网络的任何地方搜索。

#define VERTICES_NR 8

class Solid {
protected:
  Vector _vertices[VERTICES_NR];

// ... some other code (does not matter) ... //


public:
  void Solid::Move()
  {
    Vector temp; // <- my own standalone type.

    cout << "How would you like to move the solid. Type like \"x y z\"" << endl;
    cin >> temp;

    for(int i = 0; i <= VERTICES_NR; i++)
      this->[i] = this->[i] + temp;
  }
}

我该如何实施?

4 个答案:

答案 0 :(得分:4)

你可以写简单

  for(int i = 0; i < VERTICES_NR; i++)
                  ^^^
    _vertices[i] += temp;

如果要定义下标运算符,则它看起来像

Vector & operator []( int n )
{
    return  _vertices[i];
}

const Vector & operator []( int n ) const
{
    return  _vertices[i];
}

在这种情况下,在类定义中你可以像

一样使用它
operator[]( i )

this->operator[]( i )

( *this )[i]

答案 1 :(得分:4)

直接致电运营商:

operator[](i) += temp;

或通过this

(*this)[i] += temp;

答案 2 :(得分:1)

重载的运算符函数可以通过其名称显式调用,如下所示:

operator[](i) = operator[](i) + temp;

答案 3 :(得分:0)

错误:您正在访问类对象而不是成员变量顶点_。

<强>校正

for(int i = 0; i <= VERTICES_NR; i++)
  vertices_[i] = vertices_[i] + temp;

可以优化到

vertices_[i] += temp;