1

我对此有一些困难。我已经确定我需要为我的个人项目重载这个运算符。使用以下行是必需的:

if(playerVec[i] == 0)

播放器类有几个数据成员,用于计算一个特定的数据成员 mInitiative。这是我想检查我的 if 条件的那个。这是我重载它的尝试:

bool operator==(const Player& lhs) const {
    return mInitiative == lhs.mInitiative;
}

看起来还不错,但错误仍然存​​在。如果我想将该特定玩家数据与一个整数(在本例中为 0)进行比较,我该怎么做呢?我的方法有什么错误?

编辑:我试过:

 bool operator==(const Player& lhs, int rhs) const {
    //...
 }

但是编译器说函数的参数太多了。为什么是这样?==不应该可以带两个吗?

谢谢!

4

2 回答 2

4

有两种重载相等运算符的方法:将其声明为成员,接受一个参数(rhs);或将其声明为全局,采用两个参数(lhs 和 rhs)。由于您的 lhs 是 a Player,并且 yourrhs是整数,因此这里有两种定义它的方法:

// declared inside Player class as a member
bool operator == (int rhs) const
{
    return mInitiative == rhs;
}

// can also be declared inside Player class, but is not a member due to friend keyword
friend bool operator == (Player const& lhs, int rhs)
{
    return lhs.mInitiative == rhs;
}

那就是抛开以这种方式重载运算符的样式考虑。

于 2013-06-15T17:55:20.470 回答
3

当试图重载相等运算符(即==)时,您总是需要考虑目标实例是否真的相同。

在您的情况下,如果您将 Player 提供给整数比较,我认为人们在阅读以下代码时可能会感到困惑。因为它看起来像检查指针是否为空:

if(playerVec[i] == 0)

与其重载 Player 的 == 运算符来与整数进行比较,我建议提供一个 get() 函数,它可以让您更清楚地将 Player 与整数进行比较。例如:

if (playerVec[i].getPlayerID() == 0)

如果您将使用一些 stl 函数来管理您的 Player 向量(例如排序),那么您可以为两个 Player 实例重载==或运算符。>

于 2013-06-15T18:00:30.133 回答