重载在形参中接受指针的操作符

Overload an operator taking pointers in parameter

本文关键字:指针 操作符 形参 重载      更新时间:2023-10-16

我试图在参数中重载'>'操作符,但是我得到一个错误,说"操作符>必须至少有一个类型class的参数"。如果我不使用指针,我不会得到这个错误。

注意:S1是一个类型定义的结构体,和元素一样。

bool operator>(S1 const *V1, S1 const *V2){
    if (V1->elem->code > V2->elem->code)
        return true;
    return false;
}

我在这样的情况下使用运算符,例如:

S1 * funct(S1 *var1, S1 *var2){
    if (var1 > var2)
        return var1;
    return var2;
}

这不起作用,因为operator<已经为指针定义了。在内置类型上重载操作符是不可能的,因为所有对内置类型有意义的操作符都已经定义了。

编译器将把您的示例转换为比较两个指针值。将一个参数作为类类型将告诉它需要知道什么来解决重载。

bool operator>(const S1& V1, const S1& V2){
    if (V1.elem->code > V2.elem->code)
        return true;
    return false;
}
S1 * funct(S1 *var1, S1 *var2){
    if (*var1 > *var2)
        return var1;
    return var2;
}

同样,我对这个有点生疏,但我认为你必须声明操作符为S1的友元,或者使它成为成员。

在我看来,当你想定义一个有多个参数的新操作符时。有两件事你必须做。

    重载操作符必须在类之外定义。重载操作符必须声明为友元函数或类的类。

这是我的经验