【问题标题】:how to use the = operator as you create a new object?创建新对象时如何使用 = 运算符?
【发布时间】:2014-04-30 03:43:14
【问题描述】:

我有一个对象,我重载了 = 运算符以接受一个 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);

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

【问题讨论】:

  • 提供一个jakeint(int i)备用构造函数一个默认构造函数。

标签: c++ class int operator-overloading operators


【解决方案1】:

使用int 类型的参数创建一个构造函数。

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

有了这个,你可以使用:

jakeint ji = 8;

还有

jakeint ji(8);

【讨论】:

    【解决方案2】:

    只需将其添加到构造函数中即可。可以用= 指定初始化,也可以不用,没关系。无论哪种方式,它都会调用构造函数。

    【讨论】:

      【解决方案3】:

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

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

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

      jakeint() {
          _setFromInt(0);
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-20
            • 2018-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-07
            相关资源
            最近更新 更多