【发布时间】:2017-08-15 08:18:38
【问题描述】:
我正在尝试学习 C++ 中的运算符重载。
我按照教程重载了“==”运算符,以便能够比较它们之间的类对象。像这样:
bool Vector2::operator==(const Vector2& v) const
{
return ( (x_==v.GetX()) && (y_==v.GetY()) );
}
我的班级有两个变量(x_ 和 y_)。我从这个类中创建了两个对象,给出了一些值并比较了它们,它工作得很好。
但后来我使用== 运算符与整数进行比较,它也工作得很好。现在我期待 == 运算符不能处理整数,因为我刚刚重载了它来做其他事情。但它还是做到了。所以我现在有点困惑。我有一个问题:
== 运算符在像这样被重载后如何仍然可以用于比较整数/浮点数/双精度/等?在我的情况下,当它看到 Vector2 类对象作为第二个参数时,它的行为就像在重载版本中一样,而当它看到其他东西时,它的行为正常?
还有另一个问题:我有一个class classA 和一个class classB,它们都有两个变量,只是名称不同。我为classA objA 创建了两个对象,一个为classB objB 创建了一个对象,并使用默认构造函数给出了一些值。
现在是否可以重载operator == 以进行类似if(objA==objB) 的比较?或者表达式中的操作数是否需要属于同一类型? classA 还是 classB?
请帮我解决这个问题。感谢您的阅读!
【问题讨论】:
-
x_和y_是什么类型的? -
您应该添加更多来源信息。
-
您为
Vector2定义了==,而不是为int。重载根据定义是不同类型/参数的实现。其他实现不受影响。但是,如果您要重新定义==为int,那就另当别论了。 -
如何创建一个最小、完整和可验证的示例stackoverflow.com/help/mcve
-
运算符重载与所有其他重载一样工作。 (重载运算符与常规函数完全相同,但名称很时髦。)如果您研究“正常”重载以及拥有转换构造函数的潜在惊喜,您的所有问题都可以得到解答。
标签: c++ object overloading operator-keyword