重载==让类与std :: string进行比较

时间:2018-11-14 10:40:01

标签: c++ c++11

我想为类重载==运算符,以便可以将类的属性与std :: string值进行比较。这是我的代码:

#include <iostream>
#include <string>
using namespace std;

class Message
{
public:
    string text;
    Message(string msg) :text(msg) {}
    bool operator==(const string& s) const {
        return s == text;
    }
};

int main()
{
    string a = "a";
    Message aa(a);
    if (aa == a) {
        cout << "Okay" << endl;
    }
    // if (a == aa) {
    //    cout << "Not Okay" << endl;
    // }
}

现在,如果字符串在运算符的右侧,则可以使用。但是如何重载==以便在字符串位于运算符的左侧时也可以使用。

这里是link中的ideone代码。

1 个答案:

答案 0 :(得分:5)

std::string作为第一个参数的运算符必须在类之外:

bool operator==(const std::string& s, const Message& m) {
    return m == s; //make use of the other operator==
}

您可能还想创建Message::text private并将该运算符声明为类中的friend