//코드누리와 인프런의 professional c++ 공부 후, 정리한 내용.
변환 연산자란?
: 객체를 특정 기본 타입으로 형변환 시킬 때 사용함.
예시로 refWrapper 에서 사용됨
-> 네이버 블로그에 있음.
함수 만들기
operator type()
{
return type에 맞는 변수명;
}
: 아래의 코드가 가능하게 만들어라 x값으로 변환되도록.
: 아래의 코드를 올바르게 동작시켜라
operator 반환type()
{
return 반환type에 맞는 멤버;
}
이렇게..
-> 반환 타입에 신경 쓸 필요 없음. operator 뒷부분, 즉 함수 이름에 type이 뒤따라오므로..
변환 생성자 개념.
일반 타입을 객체로 형변환 시키게 하는 생성자를 말함.
형태
: 매개변수가 한개로 이루어진 생성자로, 다른 타입이 객체로 변환되게 함.
explicit을 명시하면 불가함.
: 가능하게 만들어라.
Point p = 4;
-> 컴파일러가 암묵적으로 변환을 허용함.
get함수 만들 필요 없이 객체를 통해 처리할 수 있다는 장점이 있음.
-> c언어의 함수인 fputs와 fprintf의 경우, FILE 포인터를 인자로 넣어야 함
하지만 그렇게 되면, public으로 get함수를 만들어야 하는 번거러움이 있음.
--> CFile::file을 2번째 인자로 사용해야 함.
: CFile을 FILE*로 암시적 형변환되게 하면 됨!
-> f.operator FILE * *
: 암시적 변환으로 인해 원치 않은 결과가 발생할 수 있음.
-> 2번째 인자가 디폴트이므로, foo("hello") 함수가 변환생성자를 호출함.
--> 원치 않은 결과임.
암시적 변환을 막기 위해 explicit을 사용함.
- explicit 키워드는?
:인자가 한개인생성자가 암시적 변환을 허용하는 것을 막는 역할을 함.
::인자가 한개라고 했지만, 해당 생성자도 포함됨.
-> 명시적은 이상 없음.
알아야 할 점 : 인자가 있는 생성자에서는 explicit 키워드를 사용하자!
- 암묵적으로 형변환하는 것을 방지함.
- 복사 초기화를 방지함.
1번
: 변환 생성자를 호출하면서 객체를 한 번에 생성함.
-> Direct Initialization 이라고 함.
2번
1) 임시 객체를 생성함.
-> Test t2 = 5; 부분에서 Test(5);
2) 복사 생성자를 호출하면서 객체를 생성함.
: Test(5)가 t2에 대입됨.
-> copy Initialization 이라고 함.
-> shared_ptr의 경우에는 생성자가 explicit 키워드로 작성되어 있다는 것을 유추할 수 있음.