gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:45:59 24 4
gpt4 key购买 nike

我想实现 + 号来添加两个类邮箱的“左”和“右”的 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 );
}

最佳答案

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

另一件事是你的运算符(operator)需要是类邮箱的 friend

class Mailbox
{
int my_contents;

public:
void setSize(int x) ;

// Whatever else

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

2) 或者如果你不想让它成为你的 friend ,有一个 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++ 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com