重载算子函数==

overloading operator function==

本文关键字:子函数 重载      更新时间:2023-10-16

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

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

据我所知,操作员正在对 2 个基本对象进行比较?还是我错了?当我调用函数本身时,它告诉我没有这样的函数调用。

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

没有匹配功能... operator(Base*&,Base&)

该函数不命名为 operator ,而是命名为 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.It 可以是类的成员或

2.It 可以在课外

调用重载运算符函数的方式取决于所使用的方式。在你的情况下,它似乎是在类内,但我想声明有问题,而且没有正确声明。检查此问题链接可能有用类外运算符重载

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)

认为这很有用

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

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

第二个在任何班级之外,

long operator==(Base &left, Base &right)
{
    ...
}
请注意,在任何类外部声明的参数必须采用

两个参数,类内部声明的参数必须只采用一个参数。当你这样称呼它时,

base1 == base2;

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

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

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