比较同一类的两个对象

twe*_*606 0 c++ operator-overloading operators

我试图==在C++中重载运算符.

#include <string>

using namespace std;

namespace date_independent
{
    class clock
    {
        public:
            int clockPair[2] = {0,0};
            operator string() const
            {
                string hourString;
                string minString;
                if(clockPair[0]<10)
                {
                    hourString = "0"+to_string(clockPair[0]);
                }
                else
                {
                    hourString = to_string(clockPair[0]);
                }
                if(clockPair[1]<10)
                {
                    minString  = "0"+to_string(clockPair[1]);
                }
                else
                {
                    minString = to_string(clockPair[1]);
                }
                return hourString+":"+minString;
            };
            bool operator ==(const clock&clockOne, const clock&clockTwo) const
            {
                return string(clockOne)==string(clockTwo);
            };
    };
};
Run Code Online (Sandbox Code Playgroud)

代码比我所包含的要多得多,但这是重要的部分.我想要它,以便==操作员可以比较两个类的对象clock.例如,object1==object2.有没有人可以帮助我?

Mik*_*our 5

二进制运算符==可以作为具有单个参数的成员函数(this作为左侧操作数,参数是右侧参数)重载,或者作为具有两个操作数的两个参数的非成员函数.

所以要么

  • 在类声明之外移动您的操作符声明(将定义移动到源文件,或者inline如果您将定义保留在标题中则声明它); 要么
  • 添加friend到定义中,以便它在周围的命名空间中声明一个非成员; 要么
  • 使用成员函数删除第一个参数this.

作为会员,它看起来像

bool operator==(const const & clockTwo) const {
    return string(*this) == string(clockTwo);
}
Run Code Online (Sandbox Code Playgroud)

您可能还希望直接比较两个整数值以节省制作字符串的费用.您还应该;在函数和命名空间定义之后删除流氓,尽管大多数现代编译器都不应该反对它们的存在.