重载算子函数==
overloading operator function==
我不熟悉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 作为右传递。
从您的错误消息中,我想您尝试使用我在此示例中编写的第二种类型,就好像它是第一种类型一样。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 从 c 或 cpp 系列子函数返回到主函数
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 重载算子函数==
- 如何通过参数函子参数重载函数切换
- 使用子类型重载调用函数
- C++子类中的基类函数重载
- 这个算子重载函数重载是什么
- 重载父和子函数-如何访问父函数