为什么运算符==没有重载

Why operator== is not overloaded?

本文关键字:重载 为什么 运算符      更新时间:2023-10-16

为什么 == 运算符没有正确重载(因此它只能返回 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指针 ab ,您可以像这样比较它们:

*a == *b;