1. 4번 디폴트 복사 생성자를 묵시적으로 삽입
2. 1번 값을 복사하기 때문에
3. 주소에 의한 호출
4.
(1) 같다. 함수 인자 전달 방식이 주소에 의한 호출이다.
(2) 다르다. 함수 인자 전달 방식이 *p는 주소에 의한 호출이고 &p는 참조에 의한 호출이다.
5.
(1) 5
(2) 25
6. 1 4 9
7. 2번
8. 2번 q는 c를 복사한 변수이므로 q값을 바꿔도 c는 변함없다.
9. 1번 참조 변수를 선언할 때 참조 변수가 가리키는 변수를 지정해주어야 한다.
10.
(1) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 100 }
(2) { 0, 4, 6, 8, 10, 12, 14, 16, 18, 18 }
(3) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 }
(4) { 0, 2, 4, 6, 0, 10, 12, 14, 16, 18 }
11. copy함수는 값에 의한 호출이므로 a와 b에 영향을 주지 못해 복사되지 않는다.
void copy(int &dest, int src) {
dest = src;
}
12. x = 1 , y = 100
big1함수는 값에 의한 호출이므로 x, y는 바뀌지 않는다.
big2함수는 참조에 의한 호출이므로 x, y의 값을 바꿀 수 있다.
13.
기본 생성자 : MyClass();
복사 생성자의 원형 : MyClass( const MyClass& myclass );
복사 생성자의 원형 : MyClass( const MyClass& );
14. 2번
15.
(1)
~MyClass() {
delete [] element;
}
(2)
MyClass( const MyClass& myclass ) {
this -> size = myclass.size;
this -> element = myclass.element;
}
(3)
MyClass( const MyClass& myclass ) {
this -> size = myclass.size;
this -> element = new int [size];
for(int i = 0; i < size; i++) element[i] = myclass.element[i];
}
16. 1번 복사 생성자는 하나만 선언할 수 있다.
17.
Student( const Student& student ) {
this -> name = student.name;
this -> id = student.id;
this -> grade = student.grade;
}
18.
Student( const Student& student ) {
this -> pName = student.pName;
this -> pId = student.pId;
this -> grade = student.grade;
}
19. a = b로 객체를 복사하면 디폴트 복사 생성자가 호출되므로 얕은 복사를 하게 된다. 그런데 MyClass클래스에는 element포인터가 있어서 얕은 복사로 인해 객체 a와 b는 동적 할당된 element포인터의 메모리를 공유하게 된다. 그렇게 되면 객체 a의 element를 변화시키면 객체 b의 element 또한 같이 변화되는 문제가 발생한다.
'C++ > 명품 C++ Programming' 카테고리의 다른 글
명품 C++ 6장 연습문제 - 이론 문제 (0) | 2022.01.12 |
---|---|
명품 C++ 5장 연습문제 - 실습 문제 (0) | 2022.01.10 |
명품 C++ 4장 연습문제 - 실습 문제 (0) | 2022.01.03 |
명품 C++ 4장 연습문제 - 이론 문제 (0) | 2022.01.01 |
명품 C++ 3장 연습문제 - 실습 문제 (0) | 2021.12.06 |
댓글