类中的变量的C ++运算符重载

时间:2014-07-27 17:57:13

标签: c++ class operator-overloading

我想实现+符号来添加两个类邮箱的'left'和'right'的my_Contents(int)。

离。

Mailbox(test);
Mailbox(left); 
Mailbox(right);
left.setSize( 10 ); //my_contents=10
right.setSize( 10 );//"" "" = 5
test.setSize( 5 );// "" ""=5
test = left + right;

但是,类邮箱未初始化为邮箱“名称”(my_contents)。 因此,我的代码将无法运行。那么我将如何实现运算符'+'来应用于类中的内容,这些内容不用于初始化,因为我习惯了?

Mailbox operator +(const Mailbox& left,
              const Mailbox& right) {
Mailbox t =Mailbox( left.my_Contents + right.my_Contents );
return( t );
}

2 个答案:

答案 0 :(得分:1)

1)调用setSize设置结果的my_Contents。

Mailbox operator +(const Mailbox& left, const Mailbox& right) 
{
    int s = left.my_Contents + right.my_Contents;
    Mailbox t;
    t.setSize(s);
    return t;
}

另一件事是你的运营商需要成为Mailbox类的朋友

即。

class Mailbox
{
    int my_contents;

    public:
    void setSize(int x) ;

    // Whatever else

    friend Mailbox operator +(const Mailbox& left, const Mailbox& right);
};

2)或者如果您不想让它成为朋友,请使用getSize方法

Mailbox operator +(const Mailbox& left, const Mailbox& right) 
{
    int s = left.getSize() + right.getSize();
    Mailbox t;
    t.setSize(s);
    return t;
}

其中getSize是成员方法

void getSize()
{
    return my_Contents;
}

3)或者你可以用+=

来实现它
class Mailbox
{
    int my_Contents;
    public:

    Mailbox & operator +=(const Mailbox & r)
    {
        my_Contents += r.my_Contents;
        return *this;
    }
    // Whatever else

};

Mailbox operator +(const Mailbox& left, const Mailbox& right) 
{
    Mailbox t = left;
    t += right;
    return t;
}

答案 1 :(得分:0)

这似乎可以实现您的目标:

class Mailbox
{
public:
  Mailbox() {}
  Mailbox(int x) : my_contents(x) {}
  void SetSize(int x) 
  {
    my_contents = x;
  }
  int my_contents;
};

static Mailbox operator+(Mailbox& left, Mailbox& right)
{
  return Mailbox(left.my_contents + right.my_contents);
}

Mailbox test;
Mailbox left(10);
Mailbox right(5);
test = left + right;

它确实在适当的环境下编译。