일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- array
- Windows
- 오버로딩
- 후위
- Data Structure
- 전위
- 바이낸스
- 숫자
- BST
- #선물 #비트코인#알트코인#매매#코인#마진
- 기초
- 문자열
- linked list
- 순회
- 연결 리스트
- template
- 자료구조
- C++
- 비트코인
- 트리
- Python
- trading view
- 선물
- 이진 탐색 트리
- mutable
- 템플릿 함수화
- Basic
- Tree
- SCM
- 알고리즘
Archives
- Today
- Total
Project Hub
5. 연산자 오버로딩, friend 키워드 본문
728x90
반응형
이전 글
2022.12.21 - [C++/c++ basic] - 4. implicit, explicit, mutable 키워드
4. implicit, explicit, mutable 키워드
이전 글 2022.12.21 - [C++/c++ basic] - 3. copy consturctor 3. copy consturctor 이전 글 2022.12.21 - [C++/c++ basic] - 2. reference 2. reference 이전 글 2022.12.21 - [C++/c++ basic] - 1. namespace 1. namespace namespace(이름공간) 개체를 구
projecthub.tistory.com
1. 연산자 오버로딩
(리턴 타입) operator(연산자) (연산자가 받는 인자) 형식으로 선언
위와 같은 방법 외에는 함수 이름으로 연산자를 넣을 수 없음
아래는 연산자 오버로딩에 대한 예시다.
class CMyString
{
// ... (생략)...
int Compare(const CMyString& str) const;
bool operator==(CMyString& str);
};
int CMyString::Compare(const CMyString& str) const
{
// (*this) - (str) 을 수행하여 1, 0, -1 로 결과를 리턴
// 1은 (*this) 가 사전식으로 더 뒤에 온다는 의미. 0은 두 문자열이 같다는 의미
// -1 은 (*this) 가 사전식으로 더 앞에 온다는 의미.
for (int i = 0; i < std::min(m_StrLen, str.m_StrLen); i++)
{
if (m_String[i] > str.m_String[i])
return 1;
else if (m_String[i] < str.m_String[i])
return -1;
}
if (m_StrLen == str.m_StrLen)
return 0;
else if (m_StrLen > str.m_StrLen)
return 1;
return -1;
}
bool CMyString::operator==(CMyString& str)
{
return !Compare(str);
}
2. friend 키워드
클래스 내부에서 다른 클래스나 함수들을 friend로 정의 가능
friend로 정의된 클래스나 함수들은 원래 클래스의 private 로 정의된 변수나 함수에 접근 할 수 있음
클래스 A 가 B 를 friend 로 지정할 경우, B는 A의 private로 정의된 변수나 함수에 접근 가능.
하지만 B 가 A 를 friend로 지정하지 않으면 A는 B의 private로 정의된 변수나 함수에 접근 불가.
예시
class A
{
private:
void private_func() {}
int private_num;
// 클래스 B 는 A 의 친구
friend class B;
// func 는 A 의 친구
friend void func();
};
class B
{
public:
void b()
{
A a;
// private 영역의 함수와 값이지만 friend 이기 때문에 접근 가능
a.private_func();
a.private_num = 2;
}
};
void func()
{
A a;
// private 영역의 함수와 값이지만 friend 이기 때문에 접근 가능
a.private_func();
a.private_num = 2;
}
int main() {}
728x90
반응형
'C++ > c++ basic' 카테고리의 다른 글
7. 이항 연산자 오버로딩 (2) | 2022.12.21 |
---|---|
6. Wrapper 클래스 - 타입변환 연산자 (0) | 2022.12.21 |
4. implicit, explicit, mutable 키워드 (0) | 2022.12.21 |
3. copy consturctor (0) | 2022.12.21 |
2. reference (0) | 2022.12.21 |
Comments