참조로 하든 값으로 하든 오류는 아닙니다.
전달된 coord의 내용을 메서드 내부에서 변경하려면 참조 또는 포인터로 합니다.
그리고 내용을 변경하지 않는 경우 값으로 호출하는 경우가 있는데 그렇게 하면 값을 복사하는데 시간과 메모리가 듭니다.
따라서 내용을 변경하지 않는 경우 왠만하면 값으로 하지말고 아래와 같이 하는게 낫습니다.
friend ostream &operator <<(ostream &stream, const coord& ob);
함수 호출에 있어서 다음과 같은 매개변수 전달 방식이 있습니다.
1.값
호출하는 쪽에서 객체를 스택에 복사하여 넘겨줍니다.
호출되는 함수 내부에서는 위의 임시 객체를 액세스하게 됩니다.
따라서, 호출되는 함수 내부에서 임시 객체를 수정한다하여도 호출하는 쪽에서 지정했던 객체는 변하지 않습니다.
2.포인터/참조
호출하는 쪽에서 객체의 번지/참조를 스택에 복사하여 넘겨줍니다.
호출되는 함수 내부에서 포인터/참조를 통하여 객체를 변경할 수 있음
포인터와 참조에 대한 개념을 안다면 쉽게 이해가 되리라 생각합니다.
임계종 님이 쓰신 글 :
: #include <iostream.h>
:
: class coord
: { int x,y;
: public:
: coord() {x=0;y=0;}
: coord(int i,int j) {x=i;y=j;}
: friend ostream &operator <<(ostream &stream, coord ob);
: friend istream &operator >>(istream &stream, coord &ob);
: };
:
: ostream &operator <<(ostream &stream, coord ob)
: { stream <<ob.x <<"," <<ob.y <<"\n";
: return stream;
: }
:
: istream &operator >>(istream &stream, coord &ob)
: { cout <<"Enter coordinates : ";
: stream >>ob.x >>ob.y;
: return stream;
: }
:
: ..
:
: 프랜드 함수로 삽입자 추출자를 생성할때 객체 coord ob 를 받는데
:
: 여기서 삽입자는 객체에 대한 참조로 받지 않아도 되는데
:
: 추출자는 꼭 객체에 대한 참조로 받아야 하네요.
:
: 참조로 받지 않으면 입력을 받지 않네요.
:
: (compiler 는 visual c++6.0 입니다)
:
: 책에서는 그냥 당연하다는 듯히 써 놓고 더 이상 설명이 없는데
:
: 이것에 대한 상세한 설명을 부탁드립니다.
:
: 더 이상 찾을 곳이 없어 여기에 올립니다
:
: 그럼 ..
:
|