-1

== 演算子が適切にオーバーロードされないのはなぜですか (そのため、 のみを返すことができ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");
}
4

1 に答える 1

4

オペレーターは のメンバーであるため、2 つのポインターalfaを受け入れることができず、LHS のインスタンスとRHS へのポインターを受け入れることができませんでした。alfaalphaalpha

オペレーターに 2 つのポインターを受け入れさせたい場合は、alphaそれを非メンバーにする必要があります。

class alfa
{
public:
    int x;
};

bool operator == (const alpha* lhs, const alfa* rhs)
{
    return true;
}   

ただし、ポインターなどの組み込み型の比較演算子をオーバーロードすることはできません。2 つのインスタンスで動作できるオペレーターを提供する必要があります。

bool operator == (const alpha& lhs, const alfa& rhs)
{
    return true;
}   

次に、2 つのalphaポインターaとが与えられbた場合、次のように比較できます。

*a == *b;
于 2013-11-09T13:05:18.913 に答える