[C++] 연산자 오버로딩
안녕하세요, 힘법사입니다. 제가 4학년이 되면서 요즘 글을 쓸 시간이 없었네요...
이제 제가 전자공학으로 졸업을 앞두고 있습니다. 이제 자기소개서도 쓰고 하다보니, 제가 많이 했다고 생각했지만, 컴퓨터 관련 지식이 부족하다는 생각이 드네요 앞으로 공부한 내용을 공유해볼까 합니다.
그 첫번째가 STL입니다.
저는 한빛 미디어의 "뇌를 자극하는 C++ STL"을 읽고 있습니다.
해당 Content 순서로 저도 공부한 내용을 풀어나가려 합니다.
0.연산자 오버로딩
연산자 오버로딩의 경우 저 같은 경우에는 학교에서 객체지향프로그래밍 시간에 배우고 구현한 경험이 있는 개념입니다.
이 부분에 대해서 넘어갈까 했지만, 시간이 좀 지나 저도 가물가물하여 처음부터 다시 정리하기로 마음먹었습니다.
우선 연산자 오버로딩을 사용하면 기존 컴파일러 안에서는 정의되지 않은 형식의 자료 종류에 대해서 연산이 가능하게 만들 수 있습니다.
1.예제 코드
우선 저는 연습용으로 다음과 같은 Class를 만들어줬습니다.
class Basket{
int apple;
int pear;
int galic;
public:
Basket(int a = 0, int p = 0, int g = 0) : apple(a), pear(p), galic(g) {}
void Print() const {
printf("apple : %d, pear : %d, galic : %d\n", apple, pear, galic);
}
Basket operator+( const Basket & arg) const {
Basket bk;
bk.apple = apple + arg.apple;
bk.pear = pear + arg.pear;
bk.galic = galic + arg.galic;
return bk;
}
};
Class Basket 내부의 멤버 변수에는 int apple, pear, galic이 있습니다.
이에 대해서 "+" 연산에 대한 오버로딩 함수도 작성해주었습니다.
2. 동작 확인
int main() {
Basket basket1(1, 3, 2);
Basket basket2(3, 4, 2);
cout << "basket1 : " << endl;
basket1.Print();
cout << "basket2 : " << endl;
basket2.Print();
cout << "summation : " << endl;
Basket basket_summation = basket1 + basket2;
basket_summation.Print();
return 0;
}
main 함수안을 다음과 같이 꾸며 동작을 확인해봤습니다.
우선 보시는 것과 같이 매우 깔끔하게 + 연산을 표현해내고 있습니다.
3. 다양한 연산자에 대한 오버로딩
+를 제외하고 구현한 연산자 목록 :
[++class, --class, class + class, class - class, int - class, class - int, -class, class == class, class != class, cout << class, class[], class[] = value, int()]
이렇게 다양하게 구현을 시도해 보았습니다.
2017103030/OperatorOverloading: Practice code for revies Operator Overloading (github.com)
GitHub - 2017103030/OperatorOverloading: Practice code for revies Operator Overloading
Practice code for revies Operator Overloading. Contribute to 2017103030/OperatorOverloading development by creating an account on GitHub.
github.com
소스코드는 해당 Link에서 확인하실 수 있습니다.
감사합니다 ㅎㅎ