C && C++/STL

[C++] 연산자 오버로딩

힘법사 2021. 10. 2. 01:30
728x90

 안녕하세요, 힘법사입니다. 제가 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 함수안을 다음과 같이 꾸며 동작을 확인해봤습니다.

 

우선 보시는 것과 같이 매우 깔끔하게 + 연산을 표현해내고 있습니다.

 

그림1. 결과

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에서 확인하실 수 있습니다.

 

감사합니다 ㅎㅎ

 

 

728x90

'C && C++ > STL' 카테고리의 다른 글

[C++] Functor / 함수자  (0) 2021.10.07