프렌드 함수
- 클래스의 멤버 함수가 아닌 외부 함수 ex) 전역함수, 다른 클래스 멤버 함수
- friend함수로 클래스 내에 선언된 함수
- 프랜드 선언 필요성 (클래스 멤버로 선언은 무리지만 접근이 필요한 외부 함수)
프렌드 함수가 되는 3가지
- 전역 함수 : 클래스 외부에 선언된 전역 함수
ex) friend bool equals(Rext r,Rect s);
- 다른 클래스의 멤버 함수 : 다른 클래스의 특정 멤버 함수
ex) friend bool RectManager::equals(Rect r,Rect s);
- 다른 클래스 전체 : 다른 클래스의 모든 멤버 함수
ex) friend RectManager;
연산자(operator) 중복
- C++언어에는 연산자 중복이 가능
- 높은 프로그램 가독성
ex) 정수 더하기, 문자열 합치기, 색 섞기, 배열 합치기 등 모두 가능
- C++ 본래 연산자만 중복 가능 ex) 3%%5 같은 연산자는 컴파일 오류다.
- 피 연산자 타입이 다른 새로운 연산 정의를 해야 한다.
- 연산자는 함수 형태로 구현
- 반드시 클래스와 관계를 가짐 ( 피연산자 객체이기 때문)
- 연산 우선 순위 변경 X
- 모든 연산자가 중복이 가능하지는 않다.
연산자 함수 구현 방법 2가지
1. 클래스의 멤버 함수로 구현 (바람직 하다)
2. 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
연산자 함수 형식
- 리턴타입 operator연산자(매개변수리스트);
ex) c = a+b; == c = a.operator+(b); //컴파일러가 변환한다.
전위 ++ 연산자 중복
++a -> 컴파일러에 의한 변환 => a.operator++();
++a -> ++(a) //컴파일러가 변환
후위 ++ 연산자 중복
a++ -> 컴파일러에 의한 변환 => a.operator++(임의의 정수)
a++ -> ++(a,0) //컴파일러가 변환
외부에 연산자 함수를 구현하는 경우는 언젠가
ex) b= a+2를 하면 해결이 되지만 b= 2+a를 하는 경우?
b= a.operator+(2)를 하는 것은 가능하지만 b= 2.operator(a)가 가능한가?
이는 불가능 하기 때문에 변환이 되지 않는다.
즉, 외부에 연산자 함수를 구현하여 b=+(2,a)형태로 변환되게 해야한다.
방식은 1번 방식(클래스의 멤버 함수로 구현)이 바람직하나 해결되지 않는 경우 외부 함수로 구현해야함.
'학교수업' 카테고리의 다른 글
| 사물인터넷의 이해 9주차 (0) | 2021.11.07 |
|---|---|
| 웹개발 기초 10주차 (0) | 2021.11.05 |
| 사물인터넷의 이해 8주차 (1) | 2021.11.03 |
| 사물인터넷의 이해 7주차 (0) | 2021.11.03 |
| 정보보호개론 7주차 (0) | 2021.11.01 |