10. 복사 생성자 (copy constructor) 문제 풀어보기 #1
2021. 12. 2. 02:06ㆍc++/기초
각 객체의 고유한 시리얼 넘버를 생성하는 기본 생성자를 가지고 있는 numbered라는 클래스가 있다고 가정하자.
(mysn라는 멤버에 저장됨)
-
numbered 클래스는 합성된 copy-control member 그리고 주어진 아래의 함수를 사용한다.
void f (numbered s) { cout << s.mysn << endl ; }
아래 코드를 실행 했을 때 어떤 결과가 나옵니까?
number a, b = a, c = b;
f(a) ; f(b); f(c);
answer:
a와 b와 c가 모두 같은 시리얼 넘버를 출력하는 결과가 나온다. 왜냐하면
copy constructor를 지정해주지 않으면 멤버 대 멤버로 그대로 복사(Shallow copy)가 일어나기 때문이다.
-
numbered는 새로운 시리얼 넘버를 생성하는 copy constructor를 가진다. 그 호출은 결과를 바꿀까?
그렇다면 왜? 어떤 출력이 생성될까?
answer:
새로운 시리얼 넘버가 생성 될 것이다. 대입연산자를 사용했을 때 copy constructor가 실행되기 때문이다.
세 객체 모두 다른 시리얼 넘버를 가지게 될 것이다.
3. f의 파라미터가 const numbered& 라면 어떻게 될까? 결과가 바뀔까? 바뀐다면 어떻게 출력이 될까?
answer:
결과는 2번과 다르지 않을 것이다.이미 객체의 멤버에는 저장되어 있기 때문에 결과는 크게 다를 것 같지 않다.
4. 세 가지 질문에 부합하는 클래스 numbered와 함수 f를 작성해라. 너가 예상한 결과와 같은 지 확인해라.
answer:
소스코드 참조
#include <iostream>
#include<string>
using namespace std;
class numbered {
public:
int id;
numbered();
numbered(const numbered&);
};
numbered::numbered() {
id = 1;
id++;
}
numbered::numbered(const numbered& a) {
id = a.id +1;
}
void f(const numbered& s) { cout << s.id << endl; }
int main() {
numbered a, b = a, c = b;
f(a); f(b); f(c);
}
반응형
'c++ > 기초' 카테고리의 다른 글
| 13. C++ Library 2편 : Container Library가 궁금해 (0) | 2021.12.06 |
|---|---|
| 10. 복사 생성자 (copy constructor) 문제 풀어보기 #2 (0) | 2021.12.02 |
| 13. C++ Library 1편 : IO Classes가 궁금해 (0) | 2021.12.01 |
| 12. explicit와 mutable가 궁금해 (0) | 2021.11.30 |
| 11. 생성자 초기화 리스트(initializer list)가 궁금해. (0) | 2021.11.25 |