연산자 오버로딩!!
본 자료는 1페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
해당 자료는 1페이지 까지만 미리보기를 제공합니다.
1페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

연산자 오버로딩!!에 대한 보고서 자료입니다.

목차

1. 연산자 오버로딩이란

- 연산자 오버로딩은 C++ 이 우리에게 제시하는 하나의 약속이다.
ex) p+3; -> p.operator+(3); // p 는 객체
- 본래 연산자들의 피연산자로는 기본 자료형 데이터 밖에 올 수 가 없었지만, 피연산자로 객체가 사용될 경우 위와 같이 해석된다. 즉 피연산자의 종류에 따라서 실행되는 + 연산이 달라지게 되는 것이다. 이것이 바로 연산자 오버로딩이다.

2. 연산자를 오버로딩하는 두 가지 방법
- 연산자의 종류는 단항, 이항, 삼항 연산자 (?:)로 크게 나눌 수 있는데 여기에서는 이항 연산자의 오버로딩에 대해서만 살펴볼 것이다. 단항 연산자의 오버로딩에 대해서는 조금 뒤에 배우게 되고, 삼항 연산자는 오버로딩 되지 않는다.
(1) 멤버 함수에 의한 연산자 오버로딩
- p1 + p2; -> p1.operator+(p2);
* 위에서 배운 내용과 다른게 없다.

(2) 전역 함수에 의한 연산자 오버로딩
- p1 + p2; -> operator+(p1, p2);
- 이 경우 선언된 전역 함수는 p1 객체와 p2 객체의 private 멤버 변수를 참조하게 될 것이다. 그러나 operator+ 는 전역 함수이기 때문에 클래스 외부 접근이 되므로 멤버 변수에의 접근이 제한 된다. 이를 해결하기 위해서는 클래스 내부에 이 전역함수에 대한 friend 선언을 해주어야 한다.

* 객체지향에는 전역이라는 개념이 존재하지 않으므로 가급적이면 멤버 함수에 의한 연산자 오버로딩 방법을 사용하여야 한다. 다만 전역 함수에 의한 연산자 오버로딩을 해야만 하는 상황도 발생한다. 이는 연산자의 교환법칙을 성립하게 하기 위한 방법과 <<, >> 연산자의 오버로딩 상황에서 다루겠다.

(3) 오버로딩이 가능한 연산자의 종류
- 아래는 오버로딩이 불가능한 연산자 들이다.
. .* :: ?: sizeof
- 오버로딩 가능한 연산자를 제한하는 이유는 C++ 의 문법 규칙을 어느 정도 보존시키기 위해서이다.

(4) 연산자 오버로딩에 있어서의 주의사항
1) 본래의 의도를 벗어난 연산자 오버로딩은 좋지 않다.
- p+3; 의 연산자를 오버로딩 할 때, 엉뚱하게 p 객체의 멤버 변수들이 3씩 감소한다거나 한다고 생각해 보자. 또한 멤버 변수 자체를 3씩 증가 시킬 것인지, 아니면 멤버 변수들에 3씩 더해서 새로운 객체를 생성해서 리턴할 것인지, 연산자 오버로딩은 그 자체만으로도 상당히 부담이 된다. 따라서 본래의 의도를 벗어난 형태로 연산자를 오버로딩해서 프로그래머들에게 혼란을 가중시키는 일은 피해야 한다.

본문내용

된다. 이러한 디폴트 대입 연산자는 디폴트 복사 생성자와 기능이 완전히 같다. (멤버 대 멤버 변수를 복사한다. 다른 점은 복사 생성자는 반환형이 없다는 것이다.)
- ex) p1(p2); // 디폴트 복사 생성자 호출 --> 객체의 호출 방법 C & C++ 스타일과는 다른 개념
- ex) p1=p2; // 디폴트 대입 연산자 호출 --> 객체의 호출 방법 C & C++ 스타일과는 다른 개념
- 따라서 디폴트 복사 생성자의 문제점을 그대로 가지고 있다. 즉, 얕은 복사, 깊은 복사의 문제점을 그대로 가지고 있으며, 단 이번 장에서 추가된 문제점의 하나는 메모리 유출인데, 복사 생성자는 이미 생성된 객체를 이용 새로운 객체를 생성하는 것이므로 새로 생성된 객체는 생성과 동시에 초기화가 이루어지기 때문에 얕은 복사가 되더라도 메모리가 유출되는 상황이 발생하지 않지만, 디폴트 대입 연산자의 경우 이미 생성된 두 개의 객체를 이용하여 한 객체를 다른 객체의 형태로 복사하는 것이므로 동적 할당 된 두 객체를 a, b 라 하고 b 가 a 로 얕은 복사가 이루어진다 했을 때, a 는 이미 동적 할당 된 영역을 가리키지 않고 b 의 동적 할당 된 영역을 가리키게 되므로 메모리 유출이 발생하며, 동적 할당 된 메모리 공간 해제 시 이미 해제 된 공간을 다시 해제시키는 얕은 복사 에러가 발생하게 된다.
* 생성자 내에서 메모리 공간을 동적할당하게 되면, 할당된 메모리를 해제하는 소멸자를 정의해야 하며 더불어, 깊은 복사를 하는 복사 생성자를 정의해야 하고, 대입 연산자 또한 깊은 복사가 이루어지도록 오버로딩 해야 한다.
  • 가격1,000
  • 페이지수5페이지
  • 등록일2012.03.13
  • 저작시기2009.05
  • 파일형식한글(hwp)
  • 자료번호#790593
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니