Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载运算符以与C++;_C++_Oop_Operator Overloading - Fatal编程技术网

C++ 重载运算符以与C++;

C++ 重载运算符以与C++;,c++,oop,operator-overloading,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++。不能重载指针的运算符,因为它们是基本类型(并且不能在两个参数都是基本类型的情况下创建重载);相反

有没有办法重载
>
(大于)运算符,以便执行以下操作:

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

不能重载指针的运算符,因为它们是基本类型(并且不能在两个参数都是基本类型的情况下创建重载);相反,您可以为用户定义类型的对象重载运算符(而不是指向它们的指针):

请注意,如果您没有特定的理由在堆上分配内容,最好只在堆栈上分配:

myClass a(1);
myClass b(3);
if(a > b)
    // do something

不能重载指针的运算符,因为它们是基元类型(并且不能在两个参数都是基元类型的情况下创建重载);相反,您可以为用户定义类型的对象重载运算符(而不是指向它们的指针):

请注意,如果您没有特定的理由在堆上分配内容,最好只在堆栈上分配:

myClass a(1);
myClass b(3);
if(a > b)
    // do something
试一试

试一试


如果两个参数都是基元类型,则不可能重载运算符。指针是基本类型。您的意思可能是:
if(*a>*b)
如果您使用的是对象而不是指针。在这个例子中不需要使用指针。好的,那么,没有指针,但仍然有错误。将整个代码粘贴在这里太多了。。。不过我可以粘贴错误。我发现这本书对于如何进行运算符重载很有帮助,它依次介绍了每个运算符,并说明了如何进行重载。获取免费电子书。如果两个参数都是基元类型,则无法重载运算符。指针是基本类型。您的意思可能是:
if(*a>*b)
如果您使用的是对象而不是指针。在这个例子中不需要使用指针。好的,那么,没有指针,但仍然有错误。将整个代码粘贴在这里太多了。。。不过我可以粘贴错误。我发现这本书对于如何进行运算符重载很有帮助,它依次介绍了每个运算符,并说明了如何进行重载。获得免费电子书。好,但我仍然得到这个错误(Persoana是MyClass):<代码>错误C2679:二进制'>:没有找到一个操作符,它使用一个右操作数“const PopSONA”(或者没有可接受的转换)1 >可以是“内置C++操作符>(PySOANA *,PySOANA *)”1,同时试图匹配参数列表。(Persoana*,const Persoana)@Eduard:这表示您正在将
Persoana
Persoana*
进行比较——两者都不应该是指针。我成功了。它来自一个头文件,我没有编写,它使用我的类作为模板,并且有一个指向它的指针。非常感谢!好的,但我仍然得到了这个错误(Persoana是MyClass):<代码>错误C2679:二进制'>:没有找到一个操作符,它使用一个右操作数“const PopSOANA”(或者没有可接受的转换)1可以是“内置C++操作符>(PySOANA *,PurSONA *)”1,同时试图匹配参数列表(PySOANA *,const PopSOANA)“@Eduard:这表示您正在将一个
Persoana
与一个
Persoana*
进行比较——两者都不应该是指针。它开始工作了。它来自一个我没有编写的头文件,它使用我的类作为模板,并且有一个指向它的指针。非常感谢!
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 }
}