[C++] 프랜드 함수

2020. 6. 19. 01:38·🖥️ 컴퓨터공학 🖥️/C | C++
반응형

출처 => C++ How to Program (Detitel / Prenticehall) / 현재 그리고 미래지향적인 C++ 프로그래밍(장석우, 임정목 / 비앤씨에듀케이션)

https://wowon.tistory.com/125

 

프랜드 함수란 무엇인가?

▶ C++에서는 크게 세 가지의 접근 지정자가 있다. 모든 곳에서 사용이 가능한 public, 클래스 내부와 상속받은 클래스에서 사용 가능한 protected, 그리고 선언된 클래스 내부에서만 선언이 가능한 private. 

▶ 프랜드 함수는 다른 클래스에서는 사용할 수 없는 private 형의 멤버를 사용할 수 있도록 해주는 함수이다.

▶ 프랜드 함수로 초대되는 3가지 유형이 존재한다.

1. 클래스 외부에 선언된 전역함수

2. 다른 클래스의 특정 멤버 함수

3. 다른 클래스의 모든 멤버 함수

 

1. 클래스 외부에 선언된 전역함수 예제

#include<iostream>
using namespace std;

class Rect;

//서로 다른 곳에서 선언이 된 Rect클래스와 equals메소드

class Rect {
	int width, height;
public:
	Rect(int width, int height) {
		this->width = width;
		this->height = height;
	}
//Rect클래스의 생성자 생성
	friend bool equals(Rect r, Rect s);
//전역 함수인 equals함수를 프랜드함수로 불러옴
};
bool equals(Rect r, Rect s) {
	if (r.width == s.width && r.height == s.height)
		return true;
	else return false;
}

void main() {
	Rect a(3, 4);
	Rect b(3, 4);
	if (equals(a, b))
		cout << "equal" << endl;
	else cout << "not equal" << endl;
}

 

2. 다른 클래스의 멤버함수를 프랜드로 선언하는 예제

 

#include<iostream>
using namespace std;

class Rect;
class RectManager {
public:
	bool equals(Rect r, Rect s);
};
class Rect {
	int width, height;
public:
	Rect(int width, int height) {
		this->width = width;
		this->height = height;
	}
	friend bool RectManager::equals(Rect r, Rect s);
};

bool RectManager::equals(Rect r, Rect s) {
	if (r.width == s.width && r.height == s.height)
		return true;
	else return false;
}

void main() {
	Rect a(3, 4);
	Rect b(3, 4);

	RectManager man;
	if (man.equals(a, b))
		cout << "equals" << endl;
	else cout << "not equals" << endl;
}

 

3. 다른 클래스 전체를 프랜드로 선언하는 예제

 

#include<iostream>
using namespace std;

class Rect;

class RectManager {
public:
	bool equals(Rect r, Rect s);
	void copy(Rect& dest, Rect& src);
};

class Rect {
	int width, height;
public:
	Rect(int width, int height) {
		this->width = width;
		this->height = height;
	}
	friend RectManager; //RectManager라는 클래스를 프랜드로 선언
};

bool RectManager::equals(Rect r, Rect s) {
	if (r.width == s.width && r.height == s.height)
		return true;
	else return false;
}

void RectManager::copy(Rect& dest, Rect& src) {
	//src를 dest에 복사
	dest.width == src.width;
	dest.height == src.height;
}

void main() {
	Rect a(3, 4);
	Rect b(3, 4);

	RectManager man;
	man.copy(b, a);
//b의 멤버변수 값이 a와 같아진다. a를 b에 복사
	if (man.equals(a, b))
		cout << "equals" << endl;
	else cout << "not equals" << endl;
}

 

728x90
반응형

'🖥️ 컴퓨터공학 🖥️ > C | C++' 카테고리의 다른 글

[C++] 상속(Inheritance) - 1 (feat. 개념, 상속 접근 지정자)  (0) 2020.06.19
[C++] 연산자 중복 (feat. 프랜드 함수)  (0) 2020.06.19
[C++] 생성자와 소멸자  (0) 2020.06.18
[C++] 포인터 변수 (feat. * / & / **)  (0) 2020.06.17
[C++] 조건문 (feat. if 문과 switch 문)  (0) 2020.06.17
'🖥️ 컴퓨터공학 🖥️/C | C++' 카테고리의 다른 글
  • [C++] 상속(Inheritance) - 1 (feat. 개념, 상속 접근 지정자)
  • [C++] 연산자 중복 (feat. 프랜드 함수)
  • [C++] 생성자와 소멸자
  • [C++] 포인터 변수 (feat. * / & / **)
공대생 배기웅
공대생 배기웅
군노답 미필 공대생 배기웅의 대학생활을 갈아 넣은 블로그
    반응형
  • 공대생 배기웅
    글쓰는공대생의 IT블로그
    공대생 배기웅
  • 전체
    오늘
    어제
    • 분류 전체보기 (166)
      • 🖊️ 공대생 글쓰기 🖊️ (17)
        • 공대생 회고록 (4)
        • 공대생의 끄적끄적 (4)
        • 슬기로운 공대생활 (9)
        • 사회초년생의 업무일기 (0)
      • 📈 산업공학 📈 (14)
        • 금융, 파생상품 (13)
        • 통계 (0)
        • 재무회계 (1)
      • 🖥️ 컴퓨터공학 🖥️ (92)
        • 머신러닝, 딥러닝 (12)
        • 텐서플로우, 케라스 (1)
        • 알고리즘 (24)
        • 웹 (5)
        • Python (3)
        • C | C++ (23)
        • Java (15)
        • 코드 에러 모음집 (9)
      • 😙 취미, 교양 😙 (2)
        • 영어공부 (1)
        • 일본어회화 공부 (1)
      • 🔍 정보 공유 🔍 (38)
        • 대학생 외부활동 정보 (2)
        • 개발자관련 정보 (3)
        • 대입 논술 입시자료 정보 (22)
        • 프로그램 세팅 (11)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • [공지] 글쓰는 공대생입니다 😃
  • 인기 글

  • 태그

    acmicpc
    백준
    데이터베이스
    Java
    경제성공학
    자바
    이클립스
    스캐너
    C++
    Operator
    알고리즘
    프로그래머스
    OOP
    프랜드함수
    예외
    무작위 변수
    equals프레임워크
    재귀함수
    조작자
    객체지향
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
공대생 배기웅
[C++] 프랜드 함수
상단으로

티스토리툴바