Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[266] operator<<() 함수를 friend함수로 할순 없나요? friend함수에 대한 질문입니당..
깽우 [silencep97] 3468 읽음    2002-02-20 22:59
제일 밑에 (결론)을 먼저 읽어보셔도 됩니다...

다름이 아니고.. friend함수에 대해 배우다가 class에서 operator<<() 함수를 overloading할때

friend함수를 이용하면 좋게 쓸수 있다는걸 보고는 한번 실습을 해봤습니다.

전체 source는 3개의 파일에 나누어 한개의 프로젝트에서 같이 컴파일했습니다.

test0.h 파일에 있는 내용입니다.
class Test
{
        int number;

    public:
        friend ostream & operator<<(ostream & os, Test & one);
};

test0.cpp 파일에 있는 내용입니다.
#include <iostream>
using namespace std;
#include "test0.h"

void main()
{
    Test any;
    cout << "알아보자 프렌드함수에 대해" << endl;
    cout<<any;
}

test0fun.cpp 파일에 있는 내용입니다.
#include <iostream>
using namespace std;
#include "test0.h"

ostream & operator<<(ostream & os, Test & one)
{
    os << one.number << "    제대로 된다.";
    return os;
}

이렇게 해서 컴파일을 했더니..
'number' : cannot access private member declared in class 'Test'라는 멧세지가 나오더군요.

참고로 컴파일러는 visual C++ 6.0을 썼습니다.

분명히 friend함수인데 접근을 못하더군요..  혹시나해서 다음과 같이 바꿔봤습니다.
test0fun.cpp 파일의 내용만 바꿔봤습니다.
#include <iostream>
using namespace std;
#include "test0.h"

ostream & operator<<(ostream &os, Test one)
{
    os << "제대로 되라좀...";
    return os;
}
그런데 어떻게 된게 이게 error없이 문자들이 출력되더군요.. 그러니까 class에 있는 friend

함수를 인식못한다는 소리가 되는거 같은데... 그래서 또 혹시나해서... 다음과 같이

operator함수를 바꾸어봤습니다.

test0.h 파일에 있는 내용입니다.
class Test
{
        int number;

    public:
        friend ostream & operator*(ostream & os, Test & one);
};

test0.cpp 파일에 있는 내용입니다.
#include <iostream>
using namespace std;
#include "test0.h"

void main()
{
    Test any;
    cout << "알아보자 프렌드함수에 대해" << endl;
    cout*any;
}

test0fun.cpp 파일에 있는 내용입니다.
#include <iostream>
using namespace std;
#include "test0.h"

ostream & operator*(ostream & os, Test & one)
{
    os << one.number << "    제대로 된다.";
    return os;
}

그랬더니.. error없이 똑바로 동작하는 겁니다...

(결론)
--> 그래서 이런 생각이 듭니다만... operator<<()함수는 friend함수가 될수 없다는거 말입니다.

<< 연산자를 overload한 함수는 friend함수이면 함수를 인식하지 못한다는 생각이 드는데..

이거 맞는겁니까? 이님.. 컴파일러가 인식을 못하는 걸까요.... 아님.. 제가 뭔가 잘못한 겁니까?

꼭좀 알려주세요... ^________________________^;;; 아~~ 그리고 되도록이면.. 왜그런지도

좀 상세히 알려주셨으면 합니다..한수 배우겄습니다.. 고수님덜..



+ -

관련 글 리스트
266 operator<<() 함수를 friend함수로 할순 없나요? friend함수에 대한 질문입니당.. 깽우 3468 2002/02/20
3371     Re:operator<<() 함수를 friend함수로 할순 없나요? friend함수에 대한 질문입니당.. 박현욱 2061 2002/02/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.