【发布时间】:2020-02-10 23:35:44
【问题描述】:
我正在做一个方法来看看两张牌是否有相同的数字或花色
这是我的重载运算符和我调用重载运算符的方法
bool Carta::operator==(Carta *c){
if(getNumCarta()==c->getNumCarta() || getNumPal()==c->getNumPal()){
return true;
}
else{
return false;
}
//return(numCarta==c->numCarta)||(numPal!==c->numPal);
}
bool Carta::operator!=(Carta *c){
if(getNumCarta()!=c->getNumCarta() && getNumPal()!=c->getNumPal()){
return true;
}
else{
return false;
}
}
bool Table::pairs(){
for(int i=1;i<posFull;i++){
if(t[i-1]->operator == t[i+1]){
return true;
}
}
return false;
}
我希望返回一个 true 但永远不会发生
【问题讨论】:
-
投票结束为错字。
t[i-1]->operator==(t[i+1])如果你真的想坚持显式调用操作员。或者,更常规地,*t[i-1] == t[i+1]。 (更传统的做法是不采用指针而是采用引用,因此运算符是对称的:*t[i-1] == *t[i+1])。 -
进一步,
if (x) return true; else return false;就是return x;。 -
是的!谢谢。第一和第二有什么区别?
-
可读性...在上述函数中,将其设为
function(const Carta* c) const,因为您不会更改 lhs 或 rhs -
代替
if(getNumCarta()!=c->getNumCarta() && getNumPal()!=c->getNumPal()){ return true; } else { return false; }- 只需:return getNumCarta() != c->getNumCarta() && getNumPal() != c->getNumPal();
标签: c++ class operator-overloading equality-operator