C++

C++ 실습 문제 8 (Reference, Copy Construct)

안도일 2022. 4. 8. 17:17

1. 다음 main() 함수와 실행 결과를 참고하여 half() 함수를 작성하라.

메인 함수의 변수 n을 참조하는 &res를 매개변수로 가진 half 함수를 만들어 리턴 값 없이 n의 값을 변경함.

 

 

 

 

 

2.  다음과 같이 선언된 정수를 저장하는 스택 클래스 MyIntStack을 구현하라. 단, MyIntStack 스택에 저장할 수 있는 정수의 최대 개수는 10개이다.

 

 

 

 

3-1. main()의 실행 결과가 다음과 같이 되도록 Dept 클래스에 멤버들을 모두 구현하고, 전체 프로그램을 완성하라.

10개 점수 입력 >> 10 20 30 40 50 60 70 80 90 100

60점 이상은 4명

메인 함수
클래스 선언부
클래스 구현부

 

 

3-2 Dept 클래스에 복사 생성자를 제거하라. 일부를 수정하여 복사 생성자가 없는 상황에서도 실행 오류가 발생하지 않게 하라

복사 생성자를 제거했을 때 오류가 발생하는 이유는  복사 생성자가 없을 때는 자동으로 디폴트 복사 생성자가 실행되는데, 이는 얕은 복사를 시행한다.

따라서 위 함수 countPass가 return 되어 종료되고 나면 소멸자가 생성되어 얕은 복사를 한 객체 com의 동적 할당 배열 scores를 delete 한다.

그렇게 되면 메인 함수가 끝날 때 생성되는 소멸자는 동적 할당 배열을 delete 할 수 없게 되어 오류가 발생하는 것이다.

 

따라서 함수 countPass에 com 객체의 참조를 전달 하면 문제가 해결된다.