형변환의 종류는 두가지이다. 묵시적 형변환과 암시적 형변환이 있다.
생성자가 형변환도 담당하나요?
i1,i2,i3까지는 납득이 되는 코드이다.
다만 i3=3밑부터 납득이 가지 않는다.
출력을 해보면 생성자가 5개나 호출된 것을 확인할 수 있는데
우선 i4부터 보자. int형인 4를 Item으로 형변환을 시켰더니 생성자가 호출되었다.
이때 이 Item(int num) 생성자를 변환생성자라고 본다.
비슷한 맥락으로 i3=3;을 이해해볼 수 있다. 3이 i3가 될 수 있을까를 고민할때 변환생성자가 있으니 바꿔줄 수 있다!
3을 Item객체로 바꿔주는 과정에서 변환생성자를 통해 임시객체가 생기고, 임시객체에 있는 3이라는 값이
i3로 얕은복사가 된다. (이동 생성자)
그래서 i3=3; 을 묵시적 변환 Item i4=(Item)4;를 명시적변환이라고 한다.
이제 반대로 Item을 int로 형변환 시켜볼 것이다.
잘 안되는 것을 볼 수 있다. 근데 여기서 엄청난 사실이 있다.
형변환도 연산자다???!!
c언어와 c++에서는 형변환도 연산자다. 이제 오버로딩을 하면된다!
여기서 num은 Item클래스의 private 변수로 선언된 num이다.
명시적 형변환은 int로 바뀐다 라고 (int)를 써주며 명시적으로 알려주는 것이고
묵시적 형변환은 굳이 알려주지 않아도 int() operator가 호출된다.
string으로 형변환 연산자 오버로딩은
num에 해당하는 변수는 string으로 바꾸기 위해서 to_string함수를 이용하고
name은 string이기에 그대로 써준다.
int itemNum2=i7 처럼 굳이 int로 변환한다고 명시하지 않아도 자동으로 형변환이 일어난다. (int() 연산자 오버로딩을 통해 )
연산자 오버로딩 함수 앞에 explicit을 붙여주면서 묵시적 형변환을 막아줄 수 있다.
'C++ > 기초(두들낙서)' 카테고리의 다른 글
[C++] 오버라이딩과 정적바인딩 / 가상함수와 동적바인딩 (0) | 2022.07.10 |
---|---|
Polygon 연습문제 (0) | 2022.07.10 |
[C++] 이동 시맨틱 (0) | 2022.07.10 |
[C++] 분할 컴파일/ (0) | 2022.07.05 |
[C++] 함수와 구조체 / 함수 포인터 / 참조변수 (0) | 2022.07.05 |
댓글