아래에 약간의 샘플 코드를 작성했습니다.C++에서 코드 예제는 종종 연산자 오버로딩시 메모리 위치를 사용합니까?
#include <iostream>
#include <cstdio>
using namespace std;
class Box{
int l; //length
int b; //breadth
int h; //height
public:
Box(){ l =0; b = 0; h = 0;}
Box(int d1, int d2, int d3){ l = d1;b=d2;h=d3;}
int getLength(){return l;}
friend Box operator+(Box b1, Box b2){
Box tempBox;
tempBox.l = b1.l + b2.l;
tempBox.b = b1.b + b2.b;
tempBox.h = b1.h + b2.h;
return tempBox;
}
int calculateVolume(){ return l * b * h;}
};
이 코드는 컴파일/실행시 오류가 발생하지 않습니다. 친구 기능을 다음과 같이 변경할 수도 있습니다.
friend Box operator+(Box &b1, Box &b2){
Box tempBox;
tempBox.l = b1.l + b2.l;
tempBox.b = b1.b + b2.b;
tempBox.h = b1.h + b2.h;
return tempBox;
테스트 코드도 동일하게 실행됩니다. 내 질문에, 친구 함수의 두 번째 버전 (예 : 샘플 코드에서 자주 볼 수있는)과 같은 메모리 주소로 Box 객체 'b1'및 'b2'를 참조하는 목적은 무엇입니까? 더 중요한 것은 friend 함수에 주소를 전달할 때 어떤 역 참조를하지 않고도 해당 주소에 저장된 객체를 조작하는 것을 어떻게 알 수 있습니까? 죄송합니다. 저는이 모든 것에 조금 새로운 것 같습니다. 어떤 도움을 주시면 감사하겠습니다!
C++ 기본 사항을 배워야합니다. '&'는 값으로 호출하는 대신 참조하여 호출하는 것을 의미합니다. – stark
좋은 책을 얻고 C++ 참고 자료를 읽어보십시오. 귀하의 첫 번째 예제와 두 번째 예제는 비슷하게 보이지만 그 밑에는 사납게 다른 것들을하고 있습니다. 참조 자료로 일부 통과하십시오. –
@ 벤 : "야생"이 아닙니다. 사실 어셈블리 생성이 다소 많아 지거나, 모두가 말했고 완료되었을 때 나는 놀라지 않을 것입니다. 3 개의 불필요한 정수 사본은 쉽게 삭제할 수 있습니다. –