게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C++에서 맴버함수를friend로 지정할때 전역 함수로 지정해야 하나요?
게시물ID : programmer_11365짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 412회
댓글수 : 1개
등록시간 : 2015/06/17 17:41:52

Soen페이지의 아래의 소스에 대한 설명을 보면 


"Date는 날짜를 표현하는 클래스이며 Time은 시간을 표현하는 클래스이다. 정보를 기억하는 주요 변수들은 모두 private 영역에 선언되어 있어 외부에서 함부로 액세스하지 못하도록 하였다. OutToday함수는 이 두 클래스의 객체를 인수로 전달받아 날짜와 시간을 동시에 출력한다. 그러기 위해서 OutToday는 양쪽 클래스의 모든 멤버를 읽을 수 있어야 하는데 Date나 Time의 멤버 함수로 포함되면 한쪽밖에 읽을 수 없을 것이다. 한 함수가 동시에 두 클래스의 멤버 함수가 될 수는 없기 때문이다."


라고 나와있는데 그런데 양쪽 클래스의 모든 멤버 읽을때는 반드시 클래스내부의 함수선언을 friend로 지정해야 하고 또 그 읽어들일 함수를 전역함수로 정의해야 하나요?

아래 소스처럼 전역함수가 아닌 양쪽 두 클래스중 한 클래스의 프랜드 맴버함수로 정의해서 사용할 수 있는 방법은 없을까요?

불가능 하다면 양쪽 클래스의 모든 멤버 읽을때는 무조건 전역함수로 정의해서 프랜드 지정해야 하는지 궁금하네요.

답변 주시면 좋겠습니다.


#include <Turboc.h>

 

class Date;

class Time

{

     friend void OutToday(Date &,Time &);

private:

     int hour,min,sec;

public:

     Time(int h,int m,int s) { hour=h;min=m;sec=s; }

};

 

class Date

{

     friend void OutToday(Date &,Time &);

private:

     int year,month,day;

public:

     Date(int y,int m,int d) { year=y;month=m;day=d; }

};

 

void OutToday(Date &d, Time &t)

{

     printf("오늘은 %d년 %d월 %d일이며 지금 시간은 %d:%d:%d입니다.\n",

          d.year,d.month,d.day,t.hour,t.min,t.sec);

}

 

void main()

{

     Date D(2005,01,02);

     Time T(12,34,56);

     OutToday(D,T);

}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호