티스토리 뷰
연산자 오버로딩
연산자 오버로딩은 C++ 클래스 문법으로, +,-,>,<등의 연산자를 함수처럼 사용자가 임의로 정의해서 사용할 수 있다. 무슨 뜻인지 처음 접하는 경우에는 감이 잘 오지 않을 수 있습니다. 예를들어 우리가 문자열을 만들때 많이 사용하는 char형태의 배열이 있습니다. 이러한 배열끼리는 + (더하기) 연산이 성립하지 않습니다. 그러나 연산자 오버로딩을 통해서 이를 정의해서 사용할 수 있습니다. 소스코드를 한번 보시겠습니다.
1 2 3 4 5 6 7 8 | class MyString { private: char str[50]; public: MyString operator+(const MyString &m); } | cs |
MyString이라는 이름의 클래스 헤더부분입니다. 멤버변수로 str이라는 이름의 char형 배열을 가지고 있고, + 연산자에 대한 오버로딩을 설정해 두었습니다. 헤더를 보았을때 어느정도 감이 오시나요? 이제 오버레이터 함수의 정의부를 만들어 보겠습니다.
1 2 3 4 5 6 7 8 9 | MyString::MyString(char[] str) { strcpy(this->str,str); } MyString Mystring::operator+(const MyString &m); { return MyString(strcat(str, m.str)); } | cs |
1 2 3 4 5 6 | int main() { MyString test("test "); MyString example("example"); MyString result = test + example; } | cs |
이와같이 사용하였을때 result의 멤버변수 str에 들어갈 값은 무엇일까요? "test example"이 될 것입니다. 이런식으로 연산자 오버로딩을 이용하여 문자열 관련 함수를 정의하거나, 시간과 관련된 구조체를 정의할때 보다 직관적으로 코드를 작성할 수 있습니다. 예를들어 year, month, day, hour, minute라는 멤버변수를 가지고 있는 TIME라는 구조체를 정의해서 사용할 경우에 if(TIME1 < TIME2) 등과 같이 쉬운 코드를 작성할 수 있을것 입니다.
5번째 줄처럼 오버리딩된 연산자를 호출하는것은 test.operator+(example); 이라고 호출하는것과 결과가 같습니다. 오른쪽의 피 연산자를 전달인자로 넘겨버리죠.
코드와 설명으로 이해가 되셨나요? 설명이 부족하다면 이해가 안되는 부분에 대해서 댓글로 질문 남겨주시면 답변 드리겠습니다. 도움이 되셨다면 광고를 클릭해주시면 큰 도움이 됩니다!
'C,C++' 카테고리의 다른 글
자료구조 : C++ 가변배열(Dynamic Array), 배열 동적할당 하기 (10) | 2016.03.29 |
---|---|
자료구조 : 자료구조란? (Data Structure) (7) | 2016.03.29 |
정렬(Sort) : 빠른정렬, 퀵 소트(Quick Sort) (0) | 2016.03.29 |
자료구조 : 재귀함수(Recursive Function) (0) | 2016.03.28 |
자료구조 : 선형검색(Linear Search)와 이진 검색(Binary Search) (11) | 2016.03.17 |
- Total
- Today
- Yesterday
- C
- 유즈케이스
- 티라노 시그널
- 디렉터리
- C/C++
- 티그널
- 스레드
- 파이썬예제
- 리눅스
- 파일
- 클라이언트
- 악보
- 프로세스
- C++
- MFC
- 액터
- Sort
- 소켓 프로그래밍
- 소켓
- 데이터베이스
- 안드로이드
- 터미널
- 클래스
- 정렬
- socket
- 자료구조
- 쓰레드
- 파이썬
- 라즈베리파이
- UML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |