重载运算符=非类类型

时间:2015-12-09 18:51:02

标签: c++

对不起这个可能很愚蠢的问题。我想覆盖类变量的默认mutator / accesor(使用=运算符而不是通常的set/get命名法。我想要一些可能性的指导。最近的资源我发现我的问题是this,它给了我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类中重载某些内容以返回=运算符上的原语,还是仅用于设置类对象?

我无法看到许多可能有用的情况,因为它会使代码更加模糊,但我正在转换一些覆盖了mutator和accessors的python代码,所以我想知道C ++是否具有类似的功能。

1 个答案:

答案 0 :(得分:3)

您可以定义转换运算符以使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_; }
};