0

>(より大きい)演算子をオーバーロードして、次のようなことができるようにする方法はありますか?

myClass *a = new myClass(1);
myClass *b = new myClass(3);

if(a > b) //it should compare the int values from the constructors
  //do something

演算子をオーバーロードしようとしましたが、さまざまなエラーが発生しました。私はVC++を使用しています。

4

2 に答える 2

2

ポインターの演算子はプリミティブ型であるため、オーバーロードすることはできません(また、両方の引数がプリミティブ型である場合にオーバーロードを作成することはできません)。代わりに、(それらへのポインターではなく)ユーザー定義型のオブジェクトの演算子をオーバーロードできます。

class myClass
{
    // ...
public:
    bool operator>(const myClass & right) const
    {
        return this->whatever()>right.whatever();
    }
};

myClass *a = new myClass(1);
myClass *b = new myClass(3);

if(*a > *b) //it should compare the int values from the constructors
  //do something

ヒープにデータを割り当てる特別な理由がない場合は、スタックに割り当てる方がはるかに良いことに注意してください。

myClass a(1);
myClass b(3);
if(a > b)
    // do something
于 2012-07-02T23:03:46.850 に答える
2

試す

class MyClass
{
    int value;
    public:
        bool operator>(MyClass const& rhs) const
        {
             return value > rhs.value;
        }

        MyClass(int v):value(v){}

};

int main()
{
     MyClass a(1);
     MyClass b(3);

     if (a > b) { PLOP } else { POOP }
}
于 2012-07-02T23:04:18.027 に答える