如何在创建新对象时使用等号运算符?

3

我有一个对象,并且我已经重载了=运算符来接受一个整数。

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);

但我希望它们能像整数一样正常工作。


提供一个jakeint(int i)的替代构造函数一个默认构造函数。 - WhozCraig
5个回答

2
创建一个构造函数,其参数类型为int
jakeint(int x)
{
  _setFromInt(x);
}

因此,您可以使用以下方法:

jakeint ji = 8;

以及

jakeint ji(8);

1

只需将其添加到构造函数中。您可以使用=指定初始化,也可以不使用,这没有关系。它会以任何方式调用构造函数。


0

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

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

如果您自己定义了构造函数,但仍想使用jakeint ji;,则还需要定义一个默认构造函数,例如:

jakeint() {
    _setFromInt(0);
}

0
你需要一个带有 int 参数的构造函数,以及一个拷贝构造函数。在这种情况下,隐式拷贝构造函数是可以的。(实际调用拷贝构造函数通常会被省略。)

0

jakeint ji = 8;只是jakeint ji(8);的简写别名,它们是完全相同的,所以你确实需要添加一个接受int作为输入的构造函数,就像其他人已经向你展示的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接