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 }
}