일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스위트라떼
- 말 더듬
- 아이유
- 개발자
- 핑거스타일
- 신입
- 러블리즈
- 오라클
- I'm fine thank you
- SQL 처리
- 천공의 시간
- 슬픔의 후에
- index
- Inside Of Me
- db
- IT
- 6학년 8반 1분단
- 레이디스코드
- 봄 사랑 벚꽃 말고
- DBMS
- 인덱스
- DBMS 구성요소
- nginx
- 데이터베이스
- 기타
- 오라클 아키텍처
- 악보
- oracle
- 장범준
- 니가 참 좋아
취미로 음악을 하는 개발자
[C++] 초기화 목록, 생성자 위임 본문
- 초기화 목록 안했을 때
- 초기화 목록
보이는 것과 같이 일단 위의 코드를 단 두 줄로 표현할 수 있고 그만큼 효율성도 좋다.
간단하게 둘의 차이를 말해보자면
Complex c; Complex c = Complex(1,2);
c = Complex(1, 2);
위의 차이와 같다.
즉, 명령어를 2번 실행하는 것과 1번 실행하는 것의 차이이며,
첫 번째는 메모리에 Complex가 만들어지고 그 값이 1, 2로 대입되는 것이고
두 번째는 메모리에 Complex가 만들어지면서 값이 1, 2로 대입되는 것이다.
우리가 시간을 표현할 때 보통 시, 분, 초로 표현한다.
하지만 초만 표현할 때는 12초, 5초 등으로 말하지 0분 12초라고 하지 않는다.
5분을 말할 때도 0시간 5분이라 하지 않는다.
그럼 이런식으로 표현하려면 어떻게 해야 할까? -> 생성자 위임
기본적인 구조는 초기화 목록과 비슷하지만 초기화 목록과 다른 것은 : 뒤에 오는 것이 함수 형태로 오는 것이다.
생성자 위임을 안쓰고 표현한다면 아래와 같이 디폴트 값으로도 줄 수는 있다.
Time(int h_, int m_ = 0, int s_ = 0) {
h = h_;
}
하지만 단순히 ?분 ?초로 표현 하고싶다고 하면 오버로딩을 많이 하게 될 것이다.
여기서 (1, 2, 3)으로 초기화한다면 매개변수가 3개인 생성자가 실행될 것이다.
하지만 이 때 먼저 실행되는 것은 : 뒤에 있는 함수이다. 그래서 매개변수가 2개인 생성자로 다시 가게 되고
이 과정이 반복되서 Time()에 도달할 것이다.
순서 :
h m s
0 0 0
0 0 3
0 2 3
1 2 3
위와 같은 순서로 하나씩 대입하게 되고 마지막에 h = 1, m = 2, s = 3이 되는 것이다.
'공대인 > C[++]' 카테고리의 다른 글
[C++] 인라인(inline) 함수 (0) | 2019.05.12 |
---|---|
[C++] Static 멤버 (0) | 2019.05.12 |
[C++] 객체 생성과 소멸 (0) | 2019.05.05 |
[C++] 클래스 (0) | 2019.04.23 |
[C++] Namespace (0) | 2019.04.12 |