1.class에 사용 2.함수에 사용
class를 다른 class의 친구로 만든다! = private 멤버에 접근할 수 있게 된다.
<friend.h>
class Apple{
friend class Box;
private:
int weight;
public:
int getWeight();
};
class Box{
private:
int volume;
public:
Box(int);
void setAppleWeight(Apple&, int);
int getVolume();
};
<friend.cpp>
#include "friend.h"
Box::Box(int v):volume(v){
}
void Box::setAppleWeight(Apple& app, int n){
app.weight = n;
}
int Box::getVolume(){
return volume;
}
int Apple::getWeight(){
return weight;
}
<main.cpp>
#include <iostream>
#include "friend.h"
using namespace std;
int main(){
Apple apple1;
Box box1(40);
box1.setAppleWeight(apple1, 5);
cout << apple1.getWeight() << endl;
cout << box1.getVolume() << endl;
return 0;
}
apple1 object의 weight값이 잘 바뀜을 확인할 수 있다. box가 apple의 friend로 선언되었다고 해서 apple이 box의 private 멤버에 접근할 수 있는 것은 아니다.
<apple.h>
class Apple{
private:
int weight;
public:
friend void setWeight(Apple&, int);
int getWeight();
};
<apple.cpp>
#include "Apple.h"
void setWeight(Apple& app, int n){
app.weight = n;
}
int Apple::getWeight(){
return weight;
}
setWeight는 멤버함수가 아니어서 Apple::이 없고 매개변수도 apple형 class로 받아야 한다. 단, private멤버에 접근 가능하다.