重载在形参中接受指针的操作符
Overload an operator taking pointers in parameter
我试图在参数中重载'>'操作符,但是我得到一个错误,说"操作符>必须至少有一个类型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的友元,或者使它成为成员。
在我看来,当你想定义一个有多个参数的新操作符时。有两件事你必须做。
- 重载操作符必须在类之外定义。重载操作符必须声明为友元函数或类的类。
这是我的经验
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- c++中指针操作符的列表
- 如何保存指针重定义操作符
- 我可以对指针使用操作符==吗?
- 从指针访问[]操作符
- 当操作符delete()在汇编中删除vptr指针时
- 在操作符[]前解引用成员指针
- 通过操作符[]在map中插入指针类型的值总是NULL
- 返回指向类定义的结构体的指针,多个作用域操作符
- c++用户定义的文字操作符可以传递空指针吗?
- 指针上的操作符=可能导致mac上的分段错误
- c++的new操作符保证返回的指针不会改变它的值吗?
- 使用delete操作符删除void指针
- 有没有一种方法可以通过函数指针来调用操作符函数?
- c++操作符重载以指针类型作为参数
- 与智能指针相关的c++移动语义与复制构造函数和赋值操作符
- New和delete操作符不影响指向该类的指针的Deque的内容
- c++操作符,用于a = b .* C,并将指向a、b和C对象的指针作为输入
- 涉及数组指针时delete[]操作符的问题
- c++中指针操作符可以重载吗?