2020) 방통대 C++(cpp) 기말시험 (참고용)
- 최초 등록일
- 2020.11.15
- 최종 저작일
- 2020.11
- 13페이지/ MS 워드
- 가격 5,000원
소개글
방송통신대학 1학년 2학기
C++ 프로그래밍 기말 과제 입니다.
참고용으로 보시고
좋은 성적 받으세요
목차
1. 복사 생성자, 이동 생성자, 대입 연산자, 이동대입 연산자에 대한 다음 과제를 작성하라. (30점)
2. 가상함수의 개념 및 용법을 간단한 예와 함께 A4용지 1매 내외로 설명하라. (20점)
3. 교재의 [소스코드 7-11]을 수정하여 [소스코드 5-6, 5-7]의 Complex2 객체의 배열에 대해 rPart의 제곱과 iPart의 제곱의 합을 기준으로 내림차순 정렬 및 합병을 하려고 한다. [소스코드 7-11]을 어떻게 수정해야 하는지 설명하고, 이 방법에 따라 프로그램을 수정하라. (20점)
본문내용
1. 복사 생성자, 이동 생성자, 대입 연산자, 이동 대입 연산자에 대한 다음 과제를 작성하라.
(가) 각각의 개념을 설명하라. (A4용지 1매 내외)
변수를 선언할 때 초깃값을 설정하는 것처럼, 클래스의 객체도 선언과 동시에 초기화를 하는 것이 일반적으로 더 좋은 방식이다. 생성자(Constructor)는 개체가 생성될 때, 수행할 작업을 정의하는 특수한 멤버함수로서, 객체를 정의하는 문장에 의해 자동적으로 호출된다.
복사 생성자(copy constructor)란 이러한 생성자의 일종으로 다른 객체와 똑같은 객체를 생성할 때, 사용한다. 복사 생성자를 직접 작성하지 않으면 컴파일러가 대신 만들어 주는데, 컴파일러가 생성한 복사 생성자는 데이터 멤버가 기본 타입이라면 똑같이 복사하고, 객체 타입이라면 그 객체의 복사 생성자를 호출한다. 이러한 특징에도 복사 생성자를 명시적으로 선언할 경우가 있다. 객체에 필요한 메모리를 동적으로 할당받고 반납하도록 되어 있는 클래스일 경우가 그러한데, 왜냐하면, 묵시적인 복사 생성자일 경우에 새로운 객체가 복사한 객체와 같은 주소값을 가르키는 얕은 복사(shallow copy)를 하기 때문에 복사 대상을 삭제하면 복사한 객체 역시 데이터가 삭제된다. 반면에 명시적 복사 생성자는 깊은 복사(deep copy)를 하기 때문에 이러한 문제가 발생하지 않는다.
간혹, 깊은 복사가 실행 효율을 떨어뜨릴 때가 있다. 동적 할당된 메모리에 대한 포인터변수를 멤버로 가지고 있는 클래스에서 두 객체 a, b를 연산해 새로운 객체 c에 저장할 때, 클래스의 멤버 함수는 임시 객체를 만들어 a, b의 연산 결과를 담고, 이를 c에 깊은 복사를 한 후, 임시 객체를 삭제하는 경우가 대표적이다. 특히, 클래스의 크기가 큰 경우 이러한 손실은 커진다. r-value 참조를 사용하는, 이동 생성자(move constructor)를 사용한다.
참고 자료
없음