클래스에서 int num 데이타 변수가 private내에 선언되었기 때문에 friend키워드를 사용해서
만듭겁니다.
friend를 사용하지 않을시에는 private멤버변수를 직접적으로 조작할수가 없습니다.
물론 객체도 마찬가지로 private멤버변수를 직접조작할수가 없습니다.
하지만 friend함수로 만드시면 private에 있는 멤버변수를 자유자재로 조작할수가 있는거지요
프래드를 사용하지 않고 하실려면 클래스멤버함수로 구현하시던가 굳이 외부함수로 하실려고하면
멤버변수를 public에 두어야 가능합니다.
DarkCain 님이 쓰신 글 :
: ostream & operator<<(ostream & os, Turbo &temp)
: {
: os<<tmep.num;
: return os;
: }
:
: 이렇게 클래스 내부에 간단한 <<를 오버로딩했습니다.
:
: 헌데 에러가 나오는군요...
:
: 책에서는 확실히 friend를 이용해서 작성했던데...
:
: 저걸 프랜드를 이용해서
: /**************************************************************
: class Turbo
: {
: private :
: int num;
: public :
: Turbo(num);
: friend ostream & operator<<(ostream & os, Turbo &temp);
: };
:
: ostream & operator<<(ostream & os, Turbo &temp)
: {
: os<<tmep.num;
: return os;
: }
: ***************************************************************/
:
: 이렇게 하면 에러 없이 구동합니다..
:
: 모양새만 보면, 위에껏도 맞는 것 같기도 하는데, 궂이 프랜드로 작성해야 에러 없이 출력되는 이유는 뭘까요?
:
: 혹시 프랜드를 사용하지 않고 <<를 오버로딩 하는 방법 아시는 분 있으시면,
:
: 가르쳐 주세요.
:
: //읽어주셔서 고맙습니다.
|