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);
}