C++에서 오버로드 연산자가 작동하는 방식을 배우려고합니다. 나는 +=
과 =
연산자를 구현하는 방법을 알아 냈지만 +
연산자로 고민 중입니다. 컴파일러는 연산자가 하나 또는 두 개의 인수 만 취할 수 있다고 알려줍니다. 결과를 제대로 반환하는 방법을 알아낼 수 없습니다.C++에서 LHS 인수를 수정하지 않고`+`연산자를 구현하는 방법은 무엇입니까?
인수로 취할 수있는 객체는 연산자의 LHS와 RHS가되지만, 결과를 저장하고 반환하는 클래스의 세 번째 인스턴스를 만들어야합니다. +
운영자가 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