重载运算符函数==

时间:2014-02-07 04:28:37

标签: c++ operator-overloading

我不熟悉C ++,我的导师提供了一个我很困惑的功能

     operator long (void);
      long operator == (Base & base) {
       return ! strcmp (name, base);
          }

据我所知,运营商正在对2个Base对象进行比较?或者我错了? 当我调用函数本身时,它告诉我没有这样的函数调用。

我调用它返回此错误的函数

没有......运算符的匹配函数(Base *&,Base&)

3 个答案:

答案 0 :(得分:3)

该函数未命名为operator,它的名称为operator==。这是一个overloaded comparison operator。你只需要这样称呼它:

Base a, b;
if(a==b) // <-- this is the function call
   std::cout<<"equal"<<std::endl;
else
   std::cout<<"not equal"<<std::endl;

当然,当函数是Base类的成员时就是这种情况。你没有提供所有的代码,所以我猜它是。

最重要的是,代码的第一行是另一个重载运算符的声明(一个将类转换为long),并且它的实现是在其他地方(可能)提供的。

答案 1 :(得分:1)

有两种方法可以重载运算符。

1.它可以是班级成员或

2.可以在课外

调用重载运算符函数的方式取决于您使用的方式。 在你的情况下,它似乎是在类内部,但我认为声明中有一些错误,并且没有正确声明。 检查此问题链接可能有用 Operator overloading outside class

long operator == (Base &base); // this should be your declaration inside your class

//definition
long operator == (Base &base){
  return !strcmp(name,base.name); 
}

你可以通过

在你的班级对象上调用它
obj1==obj2 or obj1.operator==(obj2)

认为这很有用

答案 2 :(得分:0)

您可以通过两种方式定义此运算符。首先是你的基类。

class Base
{
    public:
    long operator==(Base &base);
}

long Base::operator==(Base &base)
{
    ...
}

,第二个在任何课程之外,

long operator==(Base &left, Base &right)
{
    ...
}

请注意,在任何类之外声明的那个必须带两个参数,而类中的一个必须只带一个。当你这样打电话时,

base1 == base2;

如果使用第一个版本,则base1是调用运算符的对象,base2作为参数传递。

如果使用第二个版本,则base1作为left传递,base2作为right传递。

从您的错误消息中,我想您尝试使用我在本示例中编写的第二种类型,就像它是第一种类型一样。