본문 바로가기

오버로딩7

[ C++ ] << 와 >> 연산자 오버로딩 예제 2019. 11. 28.
[ C++ ] 배열 클래스와 인덱스 연산자 오버로딩 배열 접근 연산자(인덱스 연산자)인 [ ]을 오버 로딩할 것인데, 이건 멤버 함수 기반으로만 오버 로딩이 가능한 연산자이다. 이것 외에도 = 대입 연산자 ( ) 함수 호출 연산자 -> 포인터 연산자 총 4개는 멤버함수 기반으로만 오버 로딩이 가능한 연산자이다. 그럼 배열 클래스를 생성하고, 인덱스 연산자를 오버 로딩을 해보자. Int형 데이터를 저장하는 배열 클래스를 선언해 보았다. arr 크기를 5로 잡고 0번에는 1 1번에는 2 2번에는 3 3번에는 4 4번에는 5 값을 저장하였다. 근데 여기서 0~4번이 아닌 다른 인덱스를 접근하면 어떻게 될까? arr [5]에 접근하니까 이상한 데이터를 받아온다. 이렇듯 C와 C++은 기본적으로 배열에서 경계 검사를 하지 않는다. 그래서 벗어난 범위의 데이터를 가.. 2019. 10. 11.
[ C++ ] 대입 연산자 오버로딩 대입 연산자 오버 로딩을 하지 않으면 기본적으로 디폴트 대입 연산자가 생긴다. 그전에 대입 연산자의 오버 로딩이랑 복사 생성자와 비슷하기 때문에 복사 생성자 특징을 다시 살펴보면 - 정의하지 않으면 디폴트 복사 생성자가 생긴다. - 디폴트 복사 생성자는 얕은 복사를 한다. - 생성자 내에서 동적 할당을 하거나 깊은 복사가 필요하면 직접 정의를 해야 한다. 그리고 대입 연산자의 오버로딩 특징은 - 정의하지 않으면 디폴트 대입 연산자가 생긴다. - 디폴트 대입 연산자는 얕은 복사를 한다. - 연산자 내에서 동적 할당을 하거나 깊은 복사가 필요하면 직접 정의를 해야 한다. 둘은 유사하지만 호출되는 시점이 다르다. 복사 생성자의 경우에는 이렇게 호출하지만 대입 연산자 오버 로딩은 이렇게 호출한다. 즉, 복사 생.. 2019. 10. 11.
[ C++ ] 단항 연산자 오버로딩 대표적인 단항 연산자는 ++ 와 -- 두 가지가 있다. ++temp 이렇게 단항 연산자를 사용하는데, 멤버함수로는 temp.operator++()로 표현이 될 것이고, 전역 함수로는 operator++(temp)가 될 것이다. 전역 함수의 경우는 피연산자가 모두 인자로 전달되므로, 이렇게 해석된다. 그럼 먼저 단항 연산자 오버 로딩의 예시를 보자. ++ 연산자는 멤버 함수에 의한 오버 로딩이고 -- 연산자는 전역 함수에 의한 오버 로딩이다. 그럼 이때까지는 전위 증가를 구현했는데 단항 연산자의 후위 증가는 어떻게 구현을 할까? 구분하는 방법은 간단하다. ++temp는 temp.operator++() temp++은 temp.operator++(int) 또는 operator++(temp, int) --tem.. 2019. 10. 10.