创建可以访问类实例的唯一ID的运算符

时间:2018-01-05 00:31:23

标签: c++ class operators const

我想为每个类的实例创建一个唯一的id,无法修改。 然后我想创建一个运算符==,使p1==p2返回true如果p1和p2具有相同的id,即是相同的元素。 我计划这样做的方式是:

parent.hpp

class parent{
    public:
        ...
        int parent::GetUid() const;

    private:
        static int newUID;
        const int uid;

}

parent.cpp

bool operator ==(const parent p1, const parent p2)
{
    return (p1.GetUid()== p2.GetUid());
}

parent::parent()
:uid(newUID++){}


int parent::newUID=0;

int parent::GetUid() const
    {
        return uid;
    }

但是虽然我初始化了newUID,但我收到以下错误:

  

错误c2789必须初始化const限定类型的对象

编辑:上述错误已解决并因我发错误而发生。

现在,当我尝试使用运算符时,我收到以下错误:

  

错误C2676:二进制' ==' :'父母'没有定义此运算符或转换为预定义运算符可接受的类型

执行以下操作时出现此错误:

parent p1;
parent p2;
...
if(p1==p2){
    t=0;
}

2 个答案:

答案 0 :(得分:1)

为什么不直接使用每个父母的地址?

bool operator == (const parent &p1, const parent &p2)
{
    return &p1 == &p2;
}

答案 1 :(得分:1)

如果你写parent::parent() :uid(newUID++){},至少应该编译。但请注意,你必须做更多的工作来解决这种“身份”的想法。首先,newUID++不是线程安全的,因此您可以使用相同的“标识”创建不同的对象。然后,您必须提供复制构造函数,除非您希望允许相同的“标识”可以由内存中的不同对象表示。