[공학]데이터구조-클래스 상속자
- 최초 등록일
- 2007.03.05
- 최종 저작일
- 2007.03
- 10페이지/ 한컴오피스
- 가격 2,000원
소개글
이번 숙제는 클래스에 멤버변수로 배열에 대한 포인ㅌ를 가지고, big three를 정의하며(copy constructor, destructor, assign operator), operator overloading을 통해 사용자정의형 타입(클래스)끼리나 다른 형(int와 같은)과의 연산을 할 수 있게 하는 것이다.
목차
1. Purpose
2. Approach
3. Results with Discussion
4. Summary
5. Source
본문내용
1. Purpose
이번 숙제는 H.W#2에서 작성한 클래스에 멤버변수로 배열에 대한 포인ㅌ를 가지고, big three를 정의하며(copy constructor, destructor, assign operator), operator overloading을 통해 사용자정의형 타입(클래스)끼리나 다른 형(int와 같은)과의 연산을 할 수 있게 하는 것이다.
2. Approach
가. 배열에 대한 포인터
int* pointer=new int[3]; 과 같은 형태로 쓰이는 것으로서 배열은 heap에 선언되며 pointer는 그 배열에 대한 주소를 가진 포인터이다. 즉, 이번 숙제에서는 h.w#2에서 쓰였던 배열을 heap에 선언하여 포인터로 핸들링한다.
배열에 대한 포인터이므로 delete pointer가 아니라 delete [] pointer로 메모리를 해제해야한다.
나. Big Three
copy constructor, destructor, assign operator를 정의힌다. C++에서 제공하는 디폴트 연산자가 있지만 멤버데이터로 포인터를 가지므로 사용자가 정의해줘야 한다. 그 이유는 copy constructor에서는 디폴트 연산자는 포인터의 값을 복사하고 새로운 주소를 할당하는게 아니라 카피되는 대상의 포인터 주소를 복사하기 때문이고(이를 shallow copy라 한다.) destructor에서는 포인터의 메모리 해제를 위해 delete연산자를 명시적으로 호출해줘야 하는데 디폴트는 이것을 제공하지 않기 때문이다.
다. Operator overloading
사용자 정의형 타입(클래스)과 int형 끼리의 연산같은 경우에 클래스를 선언할 때 그 연산자의 동작에 대한 정의를 해줘야 한다. function overloading과 마찬가지로 연산자도 parameter를 다르게 가질 수 있고 재정의가 가능하다. 주의할 점은 이번 숙제에 쓰인 연산자는 *, +, -가 있는데 이들은 2항 연산자 이기 때문에 parameter를 하나만 가질수 있다. int형과 object와의 연산은 parameter를 2개 가지기 때문에 friend함수로 구현을 해야 한다.
<< 연산자를 재정의하여 cout<<object;를 수행하면 오브젝트의 학년이 바로 출력될 수 있게 하였다.
참고 자료
없음