gpt4 book ai didi

c++ - 重载 >= 运算符来比较指针

转载 作者:行者123 更新时间:2023-11-30 01:36:57 24 4
gpt4 key购买 nike

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

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

#include <ios>
#include <iostream>

class Point {
int x, y;
public:
Point(int x, int y);
int getX();
int getY();
bool operator>=(Point* p);
};

Point::Point(int x, int y) {
this->x = x; this->y = y;
}

int Point::getX() {
return this->x;
}
int Point::getY() {
return this->y;
}

bool Point::operator>=(Point* p) {
std::cout << "overloaded>=" << std::endl; // does not print anything
return this->x >= p->getX() && this->y >= p->getY();
}

int main() {
Point* p1 = new Point(5, 5);
Point* p2 = new Point(4, 4);
bool result = p1 >= p2;
std::cout << std::boolalpha << result << std::endl;
return 0;
}

但是当我用 g++ operator.cc -o op && ./op 编译和运行这段代码时,我总是得到输出 false,但事实并非如此打印 overloaded>= 调试消息。

最佳答案

您几乎总是想比较实际的 Point对象,而不是指向 Point 的指针.

bool Point::operator>=(Point const & p) {
std::cout << "overloaded>=\n"; // should now print something
return x >= p.x && y >= p.y;
}

然后你会这样调用它:

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

附带说明一下,如果您支持 C++ 中的比较,那么重载 operator< 会(更)常见。反而。默认情况下,标准算法将比较小于,而不是大于/等于。

但是,如果您决定实现 operator<为了与标准算法一起使用,您必须确保它执行“严格弱”比较,而您当前的比较不是(现在,有 A 和 B 的值(例如,{4,5}和 {5,4}) 对于 A>=B 和 B>=A 将返回 false,表明 A 既不小于,也不等于,也不大于 B。像这样的比较运算符可以(并且经常会) ) 从诸如排序算法之类的事物中产生未定义的行为。

关于c++ - 重载 >= 运算符来比较指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com