为什么运算符==没有重载
Why operator== is not overloaded?
为什么 == 运算符没有正确重载(因此它只能返回 true
)?我已经尝试过没有*
但它没有帮助。
#include "stdafx.h"
#include <iostream>
class alfa
{
public:
int x;
bool operator == (alfa * &f)
{
return true;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//alfa alfa2;
alfa * tab[2];
tab[0] = new alfa;
tab[1] = new alfa;
if(tab[0] == tab[1])
{
std::cout << "tak";
}
scanf("%d");
}
您的运算符是 alfa
的成员,因此它不能接受两个alfa
指针,而是接受 LHS 上的alpha
实例和 RHS 上的alpha
指针。
如果希望运算符接受两个alpha
指针,则必须将其设置为非成员:
class alfa
{
public:
int x;
};
bool operator == (const alpha* lhs, const alfa* rhs)
{
return true;
}
但是,不允许对内置类型(如指针)重载比较运算符。您必须提供一个可以对两个实例执行操作的运算符:
bool operator == (const alpha& lhs, const alfa& rhs)
{
return true;
}
然后,给定两个alpha
指针 a
和 b
,您可以像这样比较它们:
*a == *b;
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 为什么在运算符重载时需要参考?
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 为什么初始化时没有调用重载赋值运算符?
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 了解运算符重载和迭代器,为什么它会打印出"wrhrwwr"?
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- C++ 构造函数重载 - 为什么说我需要括号?
- 线性重载:为什么 clang 在 GCC 编译时失败?
- 赋值重载:为什么使用相同的对象会导致程序中出现问题
- 运算符重载 C++ - 为什么我们需要将参数作为 const 和 (...)传递?
- 运算符重载:为什么此代码不起作用
- const和volatile的重载——为什么它可以通过引用工作
- 运算符重载 - 为什么编译器C++不为类提供重载插入器和提取器函数?