重载运算符以与C ++中的另一个类一起使用

时间:2012-07-02 22:57:48

标签: c++ oop operator-overloading

是否有任何方法可以重载>(大于)运算符,以便能够执行以下操作:

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 ++。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 }
}