gpt4 book ai didi

c++重载==运算符需要一个和两个参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:16 25 4
gpt4 key购买 nike

我正在尝试在我正在做的项目中重载 == 运算符。声明和定义是:

friend bool operator==(const TradeItem& item);

bool TradeItem::operator==(const TradeItem& item)

当我编译它时它说:'bool operator==(const TradeItem&)' 必须正好有两个参数。所以我将其修改为有两个这样的参数:

friend bool operator==(const TradeItem& i1, TradeItem& i2);

bool TradeItem::operator==(const TradeItem& i1, TradeItem& i2)

但是当我编译它时它告诉我它只需要一个参数....谈论给我一个解决方案。有人知道出了什么问题吗?

最佳答案

问题在于:

friend bool operator==(const TradeItem& item);

需要两个参数并且:

bool TradeItem::operator==(const TradeItem& item)

需要一个参数。

这是因为非成员(member)版本的operator==总是需要两个而成员(member)版本需要一个。您的友元声明声明了一个非成员运算符重载。

class C {
friend bool operator==(const C &lhs, const C &rhs);
public:
bool operator==(const C& rhs);
};

bool operator==(const C &lhs, const C &rhs) { return true; }

bool C::operator==(const C& rhs) { return true; }

另外,如果您需要在左侧允许类型转换,您只需要使用两个成员版本。例如:

bool operator==(int lhs, const C &rhs);
bool operator==(double lhs, const C &rhs);

10 == C();
3.0 == C();

并且您可以在不将这些重载声明为 C 的 friend 的情况下逃脱。可能是这样的:

class C {
public:
bool operator==(const C& rhs);
bool operator==(int rhs);
bool operator==(double rhs);
};

bool operator==(int lhs, const C &rhs) { return rhs == lhs; }
bool operator==(double lhs, const C &rhs) { return rhs == lhs; }

bool C::operator==(const C& rhs) { return true; }
bool C::operator==(int rhs) { return *this == convert_int_to_C(rhs); }
bool C::operator==(double rhs) { return *this == convert_double_to_C(rhs); }

此外,由于检查相等性不应更改对象,因此您应该const 限定成员函数:

class C {
bool operator== (C const &rhs) const;
}

关于c++重载==运算符需要一个和两个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com