为什么operator ==没有超载?

时间:2013-11-09 13:00:07

标签: c++

为什么==运算符没有正确重载(因此它只能返回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");
}

1 个答案:

答案 0 :(得分:4)

您的运算符是alfa的成员,因此它无法接受两个alfa指针,而是LHS上的alpha实例和指向alpha的指针在RHS上。

如果您希望操作员接受两个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;