요즘 C++다시하고 있는데
이거 왜케 이해안되지 ㅠㅠ
오랜만에 해서 그런지 이유를 몰겠어;
class Point
{
private:
int xpos, ypos;
public:
Point(int x=0, int y=0) : xpos(x), ypos(y) {}
friend ostream& operator<<(ostream &os, const Point* &pos); // 여기가 문제
};
ostream& operator<<(ostream &os, const Point* &pos) // 여기가 문제
{
os<<'['<<pos->xpos<<", "<<pos->ypos<<']'<<endl;
return os;
} // cout<< 오버로딩
~ 생략 ~
arr[0] = new Point(3, 4);
arr[1] = new Point(5, 6);
arr[2] = new Point(7, 8);
for(int i=0;i<arr.GetArrLen();i++)
{
cout<<arr[i]<<endl; // cout오버로딩을 해서 출력
}
~ 생략 ~
대충 전체 코드를 설명하자면,
배열 클래스를 만들어서 거기에 클래스를 집어 넣은다음에
cout오버로딩을 해서 출력하는 건데,
const Point* &pos 이부분에서 참조자를 빼면 정상적으로 출력이 되는데
참조자가 있으면 이상하게도 자꾸 cout오버로딩으로 들어가지 않고 주소가 출력되(아마도 arr[i]의 주소값인듯)
이거 왜그런지 몰겠어 ㅠㅠ
전체코드가 필요하다면 다시 올릴게.
전에 글 안봤지???? Point*&에서 * 지우라니깐
야이 십보지년아 Point*& 이건 머냐 개 확보지찢년아
그러면 오버로딩이 안되지않나. *을 지우면 Point &pos 이렇게 되는건데 이러면 함수에서 포인트객체를 변수로 받겠다는 건데
그러니까 문제가 Point* &pos 에서 참조자를 빼면 정상적으로 나오는데 참조자를 넣으니까 오버로딩이 안됨
그리고 전에 글봤음.
신기하네 나도 꼭해봐야겠다
니가 ostream << 연산자에 넘기고 싶은게 뭔데? Point*&를 인자로 받는 이유가 뭐야? Point*를 받고 싶으면 굳이 레퍼런스를 쓸 이유가 없잖아.
24.17.***.***//Point객체의 주소를 넘겨서 오버로딩을 하려하는 건데 굳이 레퍼런스를 쓸 이유는 없지만 궁금해서 ....
그리고 굳이 포인터랑 레퍼런스를 둘 다 써야겠다!! 그러면 Point* const&라고 해야 된다. const Point*&라고 하면 (const Point*)의 레퍼런스인데, 니가 쓰는 배열 클래스의 [] 연산자가 (Point*)의 레퍼런스를 리턴하면 했지 (const Point*)의 레퍼런스를 리턴하진 않았을거다. Point* const&라고 해야 Point*의 const 레퍼런스를 받는다는 의미가 되지.
아...안되면 말고...ㅎㅎ
음;; 이해가 잘안되는데 ...;; const Point* &pos -> Point* const &pos 이렇게 해야되는거야?
아오 이게 어제꺼라 전체코드가 없는데 ;; 당황스럽군.
http://codepad.org/LeOmFgRe
아~ 이제 좀 알것같다.. 그런데 배열 클래스에 const Point*의 레퍼런스를 리턴은 못하니까 const Point* &pos 이건 못쓰는거네