C++ study(7)

김혜원·2023년 1월 26일
0

c++study

목록 보기
7/11

friend

1.class에 사용 2.함수에 사용

1.class

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 멤버에 접근할 수 있는 것은 아니다.

2.함수

  • 함수를 friend로 선언하면(특정 class안에서 선언), 그 함수는 멤버함수가 아니어도 그 class의 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멤버에 접근 가능하다.

0개의 댓글