개인 공부/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