如何在创建新对象时使用=运算符

how to use the = operator as you create a new object?

本文关键字:运算符 对象 创建 新对象      更新时间:2023-10-16

我有一个对象,并且重载了=运算符以接受int。

class jakeint
{
private:
    vector<short> theInt;
    void _setFromInt(int x);
    //operators
public:
    jakeint& jakeint::operator=(int x)
    {
        _setFromInt(x);
        return *this;
    }
};

这非常好用。问题是,如果我想使用=运算符,我必须这样做:

jakeint ji;
ji = 8;

我确实希望这是可行的,但我希望能够做到这一点:

jakeint ji = 8;

我该怎么做?

我意识到我可以把它添加到构造函数中并进行

jakeint ji(8);

但我希望这些能像整数一样工作。

创建一个具有int类型参数的构造函数。

jakeint(int x)
{
  _setFromInt(x);
}

有了这个,你可以使用:

jakeint ji = 8;

以及

jakeint ji(8);

只需将其添加到构造函数即可。您可以使用=指定初始化,也无所谓。它以任何一种方式调用构造函数。

您可以为jakeint ji = 8;jakeint ji(8);创建一个带参数的构造函数,例如:

jakeint(int x) {
    _setFromInt(x);
}

如果你自己定义一个构造函数,如果你仍然想使用jakeint ji;,你也需要定义一个默认的构造函数,比如:

jakeint() {
    _setFromInt(0);
}

您需要一个接受int的构造函数,以及一个复制构造函数。在这种情况下,隐式复制构造函数是可以的。(对复制ctor的实际调用通常被忽略。(

jakeint ji = 8;只是jakeint ji(8);的简写别名,它们是相同的,因此您确实需要添加一个以int为输入的构造函数,正如其他人向您展示的那样。