重载运算符=具有非类类型

overload operator= with non class types

本文关键字:类型 运算符 重载      更新时间:2023-10-16

很抱歉提出这个可能很愚蠢的问题。我想覆盖类变量的默认赋值函数/accesor(不过使用=运算符,而不是通常的set/get命名法。我希望得到一些指导。我发现的最接近我问题的资源是这个,它为我提供了50%的所需。

让我们假设我有这个类(这段代码不是我的实际需求,而是我所要求的一个更琐碎的例子)。

class IDCard {
    int id;
    int operator=(const int& n_id);    // This works for copying
};
/*
 * copy value of id out (no same value check)
 */
int& IDCard::operator=(const int& n_id) {
    id = n_id;
    return id;
}

给定IDCard my_id,我可以这样做:my_id=10,但我也想这样做:int I=my_id

为此,我是否能够重载IDCard类中的某些内容以返回=运算符上的基元,或者这只适用于设置类对象?

我看不出在很多情况下这会有用,因为这会使代码更加模糊,但我正在转换一些覆盖了它们的赋值器和访问器的python代码,所以我想知道C++是否也有类似的功能。

您可以定义一个转换运算符来使int i = my_id工作:

class IDCard {
    int id;
public:
    operator int() const { return id; }
};

然而,我强烈建议不要这样做,并建议使用普通的访问器方法:

class IDCard {
private:
    int id_;
public:
    int id() const { return id_; }
};