C++ 重载>=用于比较指针的运算符

C++ 重载>=用于比较指针的运算符,c++,pointers,operator-overloading,C++,Pointers,Operator Overloading,我试图重载>=运算符到点类,以便可以比较两个指针到点实例。但它看起来根本没有调用重载运算符,因为它没有打印调试输出。 为什么不调用重载运算符?如何让它工作 我正在尝试的代码位于operator.cc文件中: 但是,当我使用g++operator.cc-o op&&./op编译并运行此代码时,我总是得到输出false,并且它不会打印重载的>=调试消息。您几乎总是希望比较实际的点对象,而不是指向点的指针 然后调用它,就像: int main() { Point p1{5, 5}; P

我试图重载>=运算符到点类,以便可以比较两个指针到点实例。但它看起来根本没有调用重载运算符,因为它没有打印调试输出。 为什么不调用重载运算符?如何让它工作

我正在尝试的代码位于operator.cc文件中:


但是,当我使用g++operator.cc-o op&&./op编译并运行此代码时,我总是得到输出false,并且它不会打印重载的>=调试消息。

您几乎总是希望比较实际的点对象,而不是指向点的指针

然后调用它,就像:

int main() {
    Point p1{5, 5};
    Point p2{4, 4};
    std::cout << std::boolalpha << (p1>=p2) << '\n';
}

作为一个旁注,如果你支持C++中的比较,重载运算符就更常见了。你几乎总是想要比较实际的点对象,而不是指向一个点的指针。

然后调用它,就像:

int main() {
    Point p1{5, 5};
    Point p2{4, 4};
    std::cout << std::boolalpha << (p1>=p2) << '\n';
}

作为一个旁注,如果支持C++中的比较,重载运算符从指针指向对象调用类的成员函数就更为常见,使用以下方法。 假设类Point中有另一个名为cmp的函数,它将指针作为参数

bool Point::cmp(Point *p)
{
return true;
}
它可以由*p1.cmpp2的指针p1调用

类似地,重载运算符>=也可以通过以下方式调用:

bool result = *p1 >= p2;

要从指向对象的指针调用类的成员函数,可以使用以下方法。 假设类Point中有另一个名为cmp的函数,它将指针作为参数

bool Point::cmp(Point *p)
{
return true;
}
它可以由*p1.cmpp2的指针p1调用

类似地,重载运算符>=也可以通过以下方式调用:

bool result = *p1 >= p2;

重载位于点和点*之间,而不是两个指针,后者不能重载。为什么不*p1>=*p2?还有,在这个上下文中为什么要使用new呢?在比较指针时,会出现错误。将比较更改为*p1>=*p2,将函数更改为bool Point::operator>=const Point&p,并相应地更改函数体。您的运算符将由*p1>=p2Advice-重载=。所有其他运算符都可以从这两个运算符创建,而且您的类会立即变得更健壮。@SidS:如果您在一个使用==的示例中使用std::find,因为它可以用于定义相等但不定义顺序的项。您可以从重载中合成==位于点和点*之间,而不是两个指针,后者不能重载。为什么不*p1>=*p2?还有,在这个上下文中为什么要使用new呢?在比较指针时,会出现错误。将比较更改为*p1>=*p2,将函数更改为bool Point::operator>=const Point&p,并相应地更改函数体。您的运算符将由*p1>=p2Advice-重载=。所有其他运算符都可以从这两个运算符创建,而且您的类会立即变得更健壮。@SidS:如果您在一个使用==的示例中使用std::find,因为它可以用于定义相等但不定义顺序的项。您可以将==from合成为旁注,这对于标准算法来说不是有效的比较运算符,因为点5,4>=点4,5为false,点4,5>=点5,4也为false。显然,这两个点彼此不大于、不小于或等于。作为旁注,这不是标准算法的有效比较运算符,因为点5,4>=点4,5为假,点4,5>=点5,4也为假。显然,这两点既不大于,也不小于或等于对方。