Как мы можем использовать оператор в этом классе?

Я хочу написать функцию в классе, используя оператор, который я определил позже в этом классе. Но я не знаю, как показать оператору, что теперь вы должны использовать значения YOUR (x, y). (Я видел, как кто-то использовал $this->func_name в php, но здесь я не знаю.

class Point
{
  public:

    int x;
    int y;

    bool operator==(Point p)
    {
        if (x == p.x && y == p.y)
            return 1;
        return 0;
    }

    bool searchArea(vector <Point> v)
    {
        for (int i = 0; i < v.size(); i++)
            if (v[i] == /* what ?? */  )
                return 1;
        return 0;
    }
};

int main()
{
    //...
.
.
. 
    if (p.searchArea(v))
       //...
}

person Milad R    schedule 27.01.2012    source источник
comment
Также вектор должен передаваться const vector<Point>&, searchArea также должна быть константной функцией и должна возвращать true и false.   -  person Mooing Duck    schedule 28.01.2012
comment
А еще лучше: bool operator==(const Point &p) const   -  person vhallac    schedule 28.01.2012


Ответы (3)


Я видел два пути:

 if ( *this == v[i] )
 if ( operator==(v[i]) )

this — указатель на текущий объект. *this — это ссылка на текущий объект. Поскольку оператор сравнения принимает ссылку, вы должны разыменовать указатель this. Или вы можете просто вызвать функцию-член напрямую, которая неявно передает this.

person Mooing Duck    schedule 27.01.2012

Там, где у вас есть /* what ?? */, вы хотите *this

person Ben Jackson    schedule 27.01.2012
comment
Спасибо! но почему указатель на это? Я имею в виду, почему *это вместо этого? - person Milad R; 28.01.2012
comment
это не указатель на this, а разыменование указателя this для доступа к объекту, на который указывает this. - person Jason; 28.01.2012

this в C++ — это указатель на текущий объект. Если вы хотите получить доступ к реальному объекту, вам нужно добавить оператор разыменования * (отличный от Java). Например: (*this).x

class Point
{
  public:

    int x;
    int y;


    bool operator==(Point p)
    {
        if (x == p.x && y == p.y)
            return 1;
        return 0;
    }

    bool searchArea(vector <Point> v)
    {
        for (int i = 0; i < v.size(); i++)
            if (v[i] == *this  )
                return 1;
        return 0;
    }
};
person haberdar    schedule 27.01.2012