我想实现+号,以添加两个类Mailbox的“ 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;


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

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

最佳答案

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

关于c++ - 类内部变量的C++运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24983859/

10-12 04:36