C++ 10. 프렌드 연산자
title: “C++ 10. 프렌드 연산자” categories:
-
CspecialCharspecialChar
#C++ 10. 프렌드 연산자 : 네이버 블로그
c++에서 객체를 사용하다 보면 객체 내의 private 맴버에 접근 할 때가 있다
만약 객체 안의 데이터가 필요한데 외부 함수에서 필요하면 어떻게 해야 할까
우리는 friend 연산자를 통해 외부 함수가 객체 내의 데이터에 접근 할 수 있도록 할 수 있다
아래 코드를 보자
#include
using namespace std;
class Circle;
bool IsEqual(Circle r1, Circle r2);
class Circle {
int radius;
public:
Circle(int r) {
this->radius = r;
}
friend bool IsEqual(Circle r1, Circle r2);
};
bool IsEqual(Circle r1, Circle r2) {
if (r1.radius == r2.radius)
return 1;
else return 0;
}
main은 적어두지 않았다
한줄씩 가보자
#include
using namespace std; //std 네임스페이스 사용
class Circle; //Circle을 전방 선언, 뒤에 IsEqual의 매개변수로 받기 위해
bool IsEqual(Circle r1, Circle r2); //IsEqual 전방 선언. 뒤에 IsEqual에서 Circle 내의 매개변수에 접근하기 위
해(아직 private 맴버가 만들어지지 않음
class Circle {
int radius;
public:
Circle(int r) {
this->radius = r;
}
friend bool IsEqual(Circle r1, Circle r2);
};
//Circle 객체 구현, private 맴버로 radius를 가지고 있음
bool IsEqual(Circle r1, Circle r2) {
if (r1.radius == r2.radius)
return 1;
else return 0;
}//friend로 내부 데이터에 접근 가능(radius)
처음 볼 때는 무엇이 다른지 알기 힘들 수 있다
필자는 처음에는 friend가 단순히 외부 함수를 불러와 객체 내에서 쓸 수 있게끔 하는 것인 줄 알았다ㅋㅋㅋ
기억하자! 프렌드는 외부 함수가 객체 내부의 데이터에 접근하기 위해 사용된다
즉 객체 안에서 friend로 외부 함수를 불러오게 되면 외부 함수는 객체의 private데이터에 접근할수있다
(같은말 반복 ㅋㅋㅋ)
프렌드 함수로 클래스 내의 함수가 다른 클래스의 private 에 접근 할수도 있다
물론 클래스 전체를 프렌드 선언을 해서 다른 객체의 데이터를 모든 함수가 쓸 수 있다
(ㅋㅋㅋ 어렵당)
#include
using namespace std;
class Circle;
class CircleFuntion;
class Circle {
int Radius;
public:
Circle(int r) {
Radius = r;
}
friend CircleFuntion;
};
class CircleFuntion {
public:
CircleFuntion() {
}
void ShowRadius(Circle a) {
cout << a.Radius<<endl;
}
};
int main() {
Circle A(10);
CircleFuntion B;
B.ShowRadius(A);
}
CircleFuntion 클래스는 Circle에서 프렌드되어 Circle내부의 데이터에 접근이 가능하다
그래서 CircleFuntion 내에 있는 함수 ShowRadius는 입력된 Circle a의 내부 데이터 Radius를 출력한다