Как мы можем использовать оператор в этом классе? - PullRequest
1 голос
/ 28 января 2012

Я хочу написать функцию в классе, используя оператор, который я определил позже в этом классе. Но я не знаю, как показать оператору, что теперь вы должны использовать значения ВАШЕГО у). (Я видел, что кто-то использовал $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))
       //...
}

Ответы [ 3 ]

4 голосов
/ 28 января 2012

Где у вас есть /* what ?? */ вы хотите *this

2 голосов
/ 28 января 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;
    }
};
2 голосов
/ 28 января 2012

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

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

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

...