프렌드 개념 잡기!!!
1. 프렌드 지정은 단방향이다.
내가 소영이한테 친구를 지정했어!!..
소영이는 나를 친구로 지정안했어!!..
난 소영이를 친구로 생각하니까 소영이가 요청하면 다 받아줘!!..
소영이는 나를 친구로 생각안하니까 내가 요청하는걸 안받아줘!..
이렇게 비참하게 생각하면 딱 와닿음.
소영이는 나를 친구로 지정안했어!!..
난 소영이를 친구로 생각하니까 소영이가 요청하면 다 받아줘!!..
소영이는 나를 친구로 생각안하니까 내가 요청하는걸 안받아줘!..
이렇게 비참하게 생각하면 딱 와닿음.
2. 프렌드 지정은 전이되지 않는다. (EX 친구의 친구따위는 없다는거다)
3. 복수의 대상에 대해 동시에 프렌드 지정이 가능하다.
EX ) A는 B랑 C랑 친구하고 싶어요!! +_+ 그럼
B,C야 친구하자 는 안되고
B야 친구하자;
C야 친구하자;
라고 해야된다.
4. 프렌드관계는 상속되지 않는다. (엄마의 친구가 내 친구가 될 순 없자나? -_-..)
하지만, 여기서 예외가 있다.
나에겐 유니크한 부분과 엄마에게 유전받은 똑같은 부분이 있다.
그런 똑같은 부분에선 엄마의 친구와 공감대를 찾을 수 있는것처럼, 사용할수 있지만
나의 유니크한 부분은 안된다는거지.
아래의 예제를 보자.
#include
class Time;
class Date
{
private:
int year,month,day;
public:
Date(int y,int m,int d) { year=y;month=m;day=d; }
void OutToday(Time &t);
};
class Time
{
friend void Date::OutToday(Time &t);
(time t) < 값 변경 불가능, 복사만.
(tima &t) 만약 size가 200byte면 그 200byte와 값을 그대로 전달받음
받은 값을 수정 가능
(time *t) 하면 주소값만 가지고 오는것이므로 4byte가 되서 size가 적절해짐
const time *t를 한다면? 참조만 가능해진다.
그러니까 값을 변경해야된다거나 그대로 전달받아야 할때는 &가 제일 좋다.
private:
int hour,min,sec;
public:
Time(int h,int m,int s) { hour=h;min=m;sec=s; }
};
void Date::OutToday(Time &t)
{
printf("오늘은 %d년 %d월 %d일이며 지금 시간은 %d:%d:%d입니다.\n",
year,month,day,t.hour,t.min,t.sec);
}
void main()
{
Date D(2005,01,02);
Time T(12,34,56);
D.OutToday(T);
}
프렌드 멤버 함수를 알아보자!!
class Some
{
....
friend void Any::func(Some &S);
};
이렇게 하면 Any 클레스의 func멤버만 Some에 엑세스가 가능해지지.
프렌드 멤버 함수를 알아보자!!endMem
|
#include
class Time;
class Date
{
private:
int year,month,day;
public:
Date(int y,int m,int d) { year=y;month=m;day=d; }
void OutToday(Time &t);
};
class Time
{
friend void Date::OutToday(Time &t); // Date의 OutToday만 Time &t와 친구먹는다.
private:
int hour,min,sec;
public:
Time(int h,int m,int s) { hour=h;min=m;sec=s; }
};
void Date::OutToday(Time &t) // Date의 outToday에서 Time &t를 참조한다.
{
printf("오늘은 %d년 %d월 %d일이며 지금 시간은 %d:%d:%d입니다.\n",
year,month,day,t.hour,t.min,t.sec);
}
void main()
{
Date D(2005,01,02);
Time T(12,34,56);
D.OutToday(T); // Data에 OutToady에서만 Time클레스를 참조할수있다
}
댓글 없음:
댓글 쓰기