私はC++で演算子のオーバーロードがどのように機能するかを知ろうとしています。私は+=
と=
の演算子を実装する方法を理解することができましたが、私は+
演算子で苦労しています。コンパイラは、オペレータは1つまたは2つの引数しか取ることができないと伝えます。私は結果を適切に返す方法を理解できないようです。C++のLHS引数を変更せずに `+`演算子を実装するには?
私が引数として取ることができるオブジェクトは、演算子のLHSとRHSですが、結果を格納して返すために、どうやらクラスの3番目のインスタンスを作成する必要があるようです。私は+
オペレータがLHSかRHSのどちらかを変更しているとは思わないと思います。
さらに、メソッド内で新しいインスタンスを作成すると、メソッドが終了した後にそのオブジェクトが削除されるため、機能しません。
結果を新しいインスタンスに適切に保存するにはどうすればよいですか?
これは私がこれまで試したものです:あなたはoperator+
から*this
を戻ってきている
#include <iostream>
class smallclass
{
public:
smallclass();
smallclass(int x);
smallclass& operator+=(smallclass&y);
smallclass& operator=(smallclass& y);
smallclass& operator+(smallclass& y);
int a;
};
smallclass::smallclass()
{
}
smallclass::smallclass(int x)
{
this->a = x;
}
smallclass& smallclass::operator+=(smallclass&y)
{
this->a += y.a;
return *this;
}
smallclass& smallclass::operator=(smallclass& y)
{
int value = y.a;
this->a = value;
return *this;
}
smallclass& smallclass::operator+(smallclass& y)
{
int value = y.a;
this->a += value;
return *this;
}
int main()
{
smallclass a = smallclass(5);
smallclass b = smallclass(6);
std::cout << a.a << std::endl;
std::cout << b.a << std::endl;
// a = 5
// b = 6
a += b;
std::cout << a.a << std::endl;
std::cout << b.a << std::endl;
// a = 11
// b = 6
a = b;
std::cout << a.a << std::endl;
std::cout << b.a << std::endl;
// a = 6
// b = 6
smallclass c;
c = a + b;
std::cout << a.a << std::endl;
std::cout << b.a << std::endl;
std::cout << c.a << std::endl;
// a = 12 should be 6
// b = 6
// c = 12
return 0;
}
誤って何かを変更しないように、おそらく 'operator +'を 'const'にフラグを立てるべきです。あなたのオブジェクトのコピーを作成し、追加して、それを返します。 – tadman
'operator ='は値を返すことができないため、動作は未定義です。 – PaulMcKenzie
@PaulMcKenzie woops、固定されています。 – JAD