C++74 [ C++ ] 대입 연산자 오버로딩 대입 연산자 오버 로딩을 하지 않으면 기본적으로 디폴트 대입 연산자가 생긴다. 그전에 대입 연산자의 오버 로딩이랑 복사 생성자와 비슷하기 때문에 복사 생성자 특징을 다시 살펴보면 - 정의하지 않으면 디폴트 복사 생성자가 생긴다. - 디폴트 복사 생성자는 얕은 복사를 한다. - 생성자 내에서 동적 할당을 하거나 깊은 복사가 필요하면 직접 정의를 해야 한다. 그리고 대입 연산자의 오버로딩 특징은 - 정의하지 않으면 디폴트 대입 연산자가 생긴다. - 디폴트 대입 연산자는 얕은 복사를 한다. - 연산자 내에서 동적 할당을 하거나 깊은 복사가 필요하면 직접 정의를 해야 한다. 둘은 유사하지만 호출되는 시점이 다르다. 복사 생성자의 경우에는 이렇게 호출하지만 대입 연산자 오버 로딩은 이렇게 호출한다. 즉, 복사 생.. 2019. 10. 11. [ C++ ] 단항 연산자 오버로딩 대표적인 단항 연산자는 ++ 와 -- 두 가지가 있다. ++temp 이렇게 단항 연산자를 사용하는데, 멤버함수로는 temp.operator++()로 표현이 될 것이고, 전역 함수로는 operator++(temp)가 될 것이다. 전역 함수의 경우는 피연산자가 모두 인자로 전달되므로, 이렇게 해석된다. 그럼 먼저 단항 연산자 오버 로딩의 예시를 보자. ++ 연산자는 멤버 함수에 의한 오버 로딩이고 -- 연산자는 전역 함수에 의한 오버 로딩이다. 그럼 이때까지는 전위 증가를 구현했는데 단항 연산자의 후위 증가는 어떻게 구현을 할까? 구분하는 방법은 간단하다. ++temp는 temp.operator++() temp++은 temp.operator++(int) 또는 operator++(temp, int) --tem.. 2019. 10. 10. [ C++ ] 연산자 오버로딩의 교환 법칙 교환 법칙이란 'A+B= B+A'을 뜻한다. 즉, 피연산자의 위치는 연산의 결과에 아무런 영향을 미치지 않는다는 법칙인데, 대표적으로 곱셈 연산과 덧셈 연산이 있다. 먼저 예제를 보자. Dot 클래스에 곱셈 연산자가 오버로딩이 되어있다. 객체 * 뒤에 int형 데이터가 오면 x와 y좌표 값을 데이터만큼 곱해준다. 그래서 dot2는 dot1에 2를 곱하여 x좌표가 2, y좌표가 4가 된 것을 확인할 수 있다. 근데 교환법칙에 의해 * 뒤에 객체가 오게 되면 어떻게 해야 할까? 이런 문제가 발생한다. 이전 연산자 오버로딩 포스트에서 전역 함수에 의한 연산자 오버 로딩이 필요한 경우가 있다고 했는데, 이럴 때 필요하다. 다음과 같이 해결하면 된다. 그럼 전역함수에 의해서 멤버 함수의 연산자 오버 로딩에 접근할.. 2019. 10. 10. [ C++ ] 연산자를 오버로딩할 때 주의 할 점. 1. 본래의 의도를 벗어나지 않는다. ( +인데 더하지 않고 빼버리는 경우.. ) 2. 연산자의 우선순위와 결합성은 바뀌지 않는다. 3. 매개변수의 디폴트 값 설정이 불가능하다. 4. 연산자의 순수 기능은 뺏을 수 없다. 2019. 10. 10. 이전 1 ··· 9 10 11 12 13 14 15 ··· 19 다음