일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 4195
- enum c++
- 값에 의한 호출
- inline c++
- this포인터
- 선수과목
- inline사용법
- enum class
- c struct 란
- 백준#1976#dfs#bfs#그래프탐색#그래프#알고리즘#코딩#여행가자#백준여행가자
- C++ 이름공간
- enum enumclass
- class c++
- disjoint set #분리집합 # 분리집합 c++ #상호배타적집합 #알고리즘공부 #c++
- 코딩공부
- topolgy algorithm
- 2252 c++
- 참조에 의한 호출
- 윤성우 열혈 c++
- 코린이공부중....
- 백준 분리집합
- 분리집합
- 기술 면접
- inline 함수
- 선택정렬#알고리즘#C++#알고리즘 공부
- namespace c++
- 백준 14567
- C++
- class
- Today
- Total
조던을좋아하는코린이
Copy Constructor 복사 생성자 ,참조자의 선언 c++ ( 타입 &변수명(변수이름) 본문
참조자를 이용해서 간단하게 int형 타입을 이용한 변수를 선언하고 참조해보았다.
int num =20;
int &ref = num ;
이런식으로 말이다
하지만 아래의 예시는 위의 방식 말고도 다르게 변수를 선언하는 방법을 보여준다.
int num1(20);
int &ref(num1);
으로 말이다.
클래스에서의 예를 보겠다.
이를 보면
25,26에서 sim3 객체를 생성하고 10,20으로 초기화를 진행
그리고 sim4객체를 만들었고 이를
SoSimple sim4(sim3);
을 진행하였다.
이렇게 되었을 때 멤버 변수가 복사되어 sim4는 sim3과 같은 멤버 변수 값들을 가지게 된다.
원래 클래스에서 객체를 생성하게 되면 생성자가 불려야 한다고했다.
sim4의 생성자는 존재하지 않지만
생성자 호출의 관점에서는
26라인을
1) SoSimple 객체를 생성하라
2) 객체의 이름은 sim4로 생성하라
3) sim3을 인자로 받을 수 있는 생성자의 호출을 통해서 객체생성을 완료해라.
이를 생성자로 만들게 된다면 다음과 같은 형태일 것이다.
SoSimple(SoSimple ©){
구현
}
그래서 19행 SoSimple sim2 = sim1 ;
26행 Sosimple sim4(sim3);
둘다 묵시적으로 변환이되어서 객체가 생성이 되는것이다.
묵시적이란 자동적으로 변환된다는 거!!
다음의 예를 보면 확실하게 묵시적으로 변환이 된다는 사실을 명확하게 볼 수 있다.!!!
13행에서 SoSimple sim2(sim1); 생성자를 선언하였다.
main문에서는 위와 같은 문장을 찾을 수 없다.
하지만 출력을 보게되면 13행이 실행되어 출력이 되는것을 확인할 수 있다.
이는 묵시적으로
SoSimple sim2 = sim1 ; => SoSimple sim2(sim1);
로 변환된다는 것이다!!
그리고 이 13행에 선언된 생성자를 우리는 복사생성자 (copy constructor)라고 부른다!
생성자에 const를 선언함으로써 멤버 대 멤버간의 복사에서 원본이 변경되는 실수를 방지하고자 const를 삽입!
이런 코드가 좋다고한다... 사실 내가 실제로 이런걸 생각하고 사용할지는 잘 모르겠지만 항상 생각하려고 노력해봐야겠다!!!
위의 예들을 통해서 복사 생성자 (Copy Constructor)가 선언 없이도 멤버 대 멤버가 복사되는 것을 경험하고 확인하였다.
" 복사 생성자를 정의하지 않으면, 멤버 대 멤버의 복사를 진행하는 디폴트 복사 생성자가 자동으로 삽입된다 "
따라서 그림 < 2 > 와 그림 < 3 >의 Class 구현은 완전히 동일하다!
복사 생성자의 묵시적 호출이 싫으면 -> explict 키워드를 사용하자!
객체의 생성 및 초기화가 불가능하다
아래 블로그 참고!
https://justdoithwoooooo22.tistory.com/32
묵시적 변환 C++
int num = 2; 라고 선언이 되면 묵시적 (자동적)으로 int num(2) ;로 변경된다. 이전에 코드에서 묵시적인 형변환으로 인해서 복사 생성자를 선언하지 않아도 묵시적 변환이 발생하여 객체간의 대입
justdoithwoooooo22.tistory.com