Перегрузка операторов сравнения в с ++

0

Как перегрузить мой оператор таким образом, чтобы я мог сравнивать два указателя вершин?

class graph
{
private:
class vertex;
class edge;

class vertex
{
public:
    int index;
    int estDistanceToGoal;
    int traveledDis;
    string location;

Вот пример того, когда я перегружаю оператор>. Проблема заключается в этом методе на триггеры, когда у меня есть объект вершин, который сравнивается с указателем вершин.

    bool operator> (vertex* v)
    {
                    cout<<"we did this"<<endl;
        return (this->weight > v->weight);
    }

Вот пример, который я использовал для тестирования. Он будет печатать только "мы сделали это", если бы у меня был объект вершин и сравнивался указатель вершин. Итак, как мне это сделать, чтобы сравнить два указателя вершин? Можете ли вы почитать "это"?

    void test()
{
    vertex*a = new vertex("wj",5);
    vertex*v = new vertex("something",2);

    if(a == v)
    {
        cout<<"what"<<endl;
    }
    else
    {
        cout<<"k"<<endl;
    }
}
  • 0
    Вы должны сравнить сами вершины, т. Е. if (*a < *v) , и определить объект сравнения для получения аргумента вершины.
  • 0
    Вы не ожидаете, что сможете сравнивать два значения типа int , сравнивая с ними указатели. Почему бы вы сделали это по-другому с vertex ?
Теги:
operator-keyword
this
overloading

1 ответ

0

Вы не можете, к счастью. Все операторы сравнения уже имеют хорошо установленное поведение для указателей любого типа. И вы не можете перегружать операторов, если хотя бы один из параметров не является определяемым пользователем типом.

  • 0
    Итак, что вы предлагаете мне сделать, если мне нужно сравнить два указателя вершин? Все ли мои структуры данных должны быть объектами вершин?
  • 0
    @ user2782774: Это вариант, который обычно предпочтительнее. Но даже если у вас есть указатели, вы всегда можете разыменовать их в точке сравнения.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню