좋아, 나는 책을 통해 작업 중이며 C++ 연산자 오버로딩을 배우려고합니다. 생성자에 대해 단일 int (처음에는 0으로 설정)를 사용하는 BigInt 클래스를 만들었습니다. 나는 + = 메소드를 오버로드하고 다음과 같은 코드에서 잘 작동합니다 :C++에서 연산자 + 오버플로
BigInt x = BigInt(2);
x += x;
x.print(cout);
코드를 출력 4. 그래서, 나는 다음과 같은 코드 글로벌 연산자를 오버로드 + 사용하여 작업을했다 :
BigInt operator+(const BigInt lhs, const BigInt rhs)
{
BigInt returnValue(lhs);
returnValue += rhs;
return returnValue;
}
을
이것은 또한 다음과 같은 코드를 잘 작동 : 나는 다음과 같은 코드를 실행하려고 할 때이, 그러나 6을 출력
BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();
, 그냥 작동하지 않습니다. 이 책은 잘 설명하지 못하고 간단히 작동해야 함을 의미합니다.
BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();
이 z는 1 왜 내가 온라인과 유래에 인터넷 검색 6.해야하지만 정확히 같은 문제가 된 그 다른 사람을 찾을 수있을 때 잘 모르겠어요 1. 출력합니다. 일부는 가깝지만 대답은 적합하지 않았습니다. 어떤 도움을 많이 주시면 감사하겠습니다!
나는 이것이 당신의 문제와 관련이 있다고 생각하지 않지만 효율성을 위해서 (그리고 C++에서 관용적이기 때문에)'operator +'에 대한 인수는 값이 아니라 const 참조에 의해 취해 져야한다. 'BigInt operator + (const BigInt & lhs, const BigInt & rhs) ' –
계속 궁금해하는 한가지 :'= 1' 대신에'BigInt (1)'을 쓰는 이유는 무엇입니까? 우리가 완전한 클래스 정의를 보여준다면, 우리는 당신을 더 잘 도울 수 있다고 생각합니다. –
나는 Tyler에 동의합니다. 또한 BigInt x (1);로 초기화하는 관용적 인 방법 당신이하고있는 방식은 일시적으로 생성 된 다음 복사본 ctor를 호출합니다 (그래도 아마 최적화 될 것입니다). – Dan