C++
[C/C++ 강좌] 71강. 묵시적 형변환 (1)
코다람쥐
2022. 1. 18. 15:08
https://www.youtube.com/watch?v=p-HwpKOpaAs&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=76
1. 묵시적(암시적) 형변환
// 묵시적(암시적) 형변환 implicit conversion
// 명시적 형변환 explicit conversion
#include <iostream>
#include <string>
using namespace std;
class Item {
public:
Item(int num) : num(num) {
cout << "Item(int)" << endl;
}
Item(string name) : name(name) {
cout << "Item(string)" << endl;
}
Item(int num, string name) : num(num), name(name) {
cout << "Item(int, string)" << endl;
}
private:
int num;
string name;
};
int main() {
Item i1 = Item(1);
Item i2(2);
Item i3 = 3;
i3 = 3;
Item i4 = (Item)4;
Item i5(5);
it = (string)"stone";
Item i6(1, "grass");
Item i7 = { 2, "dirt" };
i7 = { 2, "dirt" };
}
main함수에서 i3 = 3;과 Item i4 = (Item)4; 라는 표현을 살펴보자.
먼저 Item i4 = (Item)4라는 표현을 살펴보면 int형이 Item형으로 명시적 형변환 되고 있는 것을 알 수 있다.
그런데 어떻게 Item으로 형변환 되는지 궁금하다.
그것은 변환생성자가 int형을 Item형으로 바꿔주는 역할을 하고 있다.
Item(int num) : num(num) { // 생성자역할과 변환생성자 역할을 맡음.
cout << "Item(int)" << endl;
}
이 생성자가 변환생성자 역할을 하고있다. 이 생성자를 주석처리하면 구문오류가 뜨는 것을 볼 수 있다.
마찬가지로 다른 생성자들도 그에 맞는 자료형이 매개변수로 들어오게되면 변환 생성자 역할을 할 수 있다.
하지만 형변환을 해주지도 않았는데 알아서 형변환이 되어서 Item클래스에 저장되는 것을 알 수 있다.
이것들은 변환생성자를 통해 묵시적으로 형변환이 이루어지고 있는 것이다.
i5, i6, i7은 들어오는 자료형에 맞게 변환생성자의 역할을 하는 생성자들도 들어맞는 자료형에 따라 바뀐다.