본문 바로가기
[ CODING STUDY ]/》C++ 공부

C++ 17장 [프렌드 함수]

by MRG 2022. 11. 18.
728x90
반응형

▣ 안녕하세요. 이번장에서는 프렌드 함수를 공부해보도록 하겠습니다.

C++에서 객체(클래스)의 private 멤버에는 해당 객체가  public 멤버 함수를 통해서만 접근이 가능했습니다.
하지만 상황에 따라 객체의 멤버 함수가 아닌 일반 함수도 private 멤버에 접근해야만 할 경우가 있습니다.

이럴 때 프렌드 함수를 사용합니다. 

프렌드 함수를 사용하기 위해서는 프렌드(friend)라는 접근 제어 키워드를 사용해야 합니다.

코드를 작성하며 공부해보도록 하겠습니다.

 

▣ 먼저 클래스를 선언해주시고 public: 접근 연사자에서 friend 키워를 넣어 접근할 함수를 작성합니다.

그리고 함수의 매개변수에 (Calculator c)를 매개변수로 주시고 

sum(Claculator c) 코드에서 처럼 매개변수 클래스로 접근할 수 있게 됩니다.

그럼 일반 함수에서 멤버 함수가 아니더라도 멤버 함수처럼 클래스에 있는 멤버 변수에 접근할 수 있습니다. 

코드를 이어서 작성하겠습니다.

 

▣ 메인 함수에서 클래스를 선언해주시고 디버그를 해보면 

클래스의 멤버 변수에 접근하여 일반함수가 클래스의 멤버 변수 값을 더해 출력하는 걸 확인할 수 있습니다. 

 

 

 

▣ 이렇게 friend를 빼면 오류가 나오는 것도 확인할 수 있습니다.

이번에는 클래스를 프렌드로 접근해보겠습니다. 

 

▣ 클래스를 두 개 생성하겠습니다. 

우선 Calculator2 클래스가 선언되기 전에 먼저 참조 오류를 방지하기 위해 Calculator 클래스 위에 

Calculator2에 존재를 선언해줍니다. 

그리고 Calculator클래스에 public 안에 friend Calculator2를 넣어주겠습니다.

그럼 Calculator2에서 Calculator클래스 함수를 멤버처럼 접근할 수 있습니다. 

 

Calculator2 클래스에서는 friend Calculator를 접근하는 코드를 넣고 자신의 생성자와 아까 만들었던 Calculator 클래스의 멤버 함수를 정의하는 코드를 작성합니다.

그리고 멤버 함수 매개변수에 Calculator2를

멤버 변수를 접근하여 출력하는 코드를 멤버 함수에 작성하겠습니다.

 

▣ 메인 함수에서 Calculator과 Calculator2를 선언하고 

c1.sum(c2) 코드처럼 Calculator2를 선언한 c2를 전달하고 디버그를 해보면 Calculator에 있는 멤버 함수에

Calculator2의 멤버 변수를 출력한 걸 확인할 수 있습니다.

friend로 선언한 함수나 클래스에는 접근 연산자(private, public, protected)의 영향을 받지 않습니다.

 

 

728x90
반응형

'[ CODING STUDY ] > 》C++ 공부' 카테고리의 다른 글

C++ 18장 [템플릿1]  (0) 2022.11.24
C++ 16장 [static 멤버 변수, 함수]  (2) 2022.11.16
C++ 15장 [디폴트 매개변수]  (0) 2022.11.11
C++ 14장 [복사생성자]  (0) 2022.11.11
C++ 13장 [참조변수]  (0) 2022.11.04

댓글