개인 공부/C++
변환 생성자와 explicit
chaeD2
2022. 5. 16. 17:41
변환 생성자
기본 타입으로부터 객체를 생성하는 생성자로, 인수를 한 개만 취한다.
이를 통해 클래스도 일반 자료형 객체처럼 암시적 변환이 가능하다.
explicit
엄격한 타입 체크를 위해 explicit 키워드로 암시적 형 변환을 막는다.
예제
정수를 받아 Time 객체를 만드는 생성자
class Time
{
private:
int hour,min,sec;
public:
Time() { }
explicit Time(int abssec) { //**주목
hour=abssec/3600;
min=(abssec/60)%60;
sec=abssec%60;
}
};
void main()
{
Time Now(3723);
Now.OutTime();
Time Now=3723; // 불가능
Time Now(3723); // 가능
Time Now=(Time)3723; // 가능
}
명시적인 형 변환(생성자 호출) 또는 캐스트 연산자는 explicit 키워드와는 관계 없이 허용된다.
복사 생성자도 변환 생성자인가?
답은 NO이다. 복사 생성자도 인수를 1개만 취한다는 특징이 있지만, 동일 타입으로부터 사본을 생성하는 것이므로 변환 생성자로 볼 수 없다.
ref
http://www.soen.kr/lecture/ccpp/cpp3/26-3-1.htm
혼자 연구하는 C/C++ by WinApi
26-3.타입 변환 26-3-가.변환 생성자 일반 타입의 변수끼리 값을 대입할 때는 산술 변환 규칙에 따라 암시적으로 상호 변환된다. 물론 모든 타입들이 다 상호 변환되는 것은 아니며 호환되는 타입
www.soen.kr