의미 : 묵시적인 타입 변환을 하지 않고 명시적으로 타입 변환을 하였을 경우에만 사용하겠다는 뜻 입니다.
예제를 간단하게 작성해보았습니다~
사용 방법
#include <iostream>
using namespace std;
class SoSimple
{
private:
int num1;
int num2;
public:
SoSimple(int n1, int n2)
:num1(n1), num2(n2)
{
}
SoSimple(SoSimple ©)
:num1(copy.num1), num2(copy.num2)
{
cout << "SoSimple(SoSimple ©)가 호출됨\n";
}
void ShowSimpleData()
{
cout << num1 << endl << num2 << endl;
}
};
int main(void)
{
SoSimple sim1(15, 30);
cout << "생성 및 초기화 전" << endl;
SoSimple sim2 = sim1;
cout << "생성 및 초기화 후" << endl;
sim2.ShowSimpleData();
return 0;
}
사용하는 이유와 특징
: 이와 같이 코딩 하였을 경우 SoSimple sim2 = sim1; 이 부분에서 타입이 묵시적으로 변환되어 삽입되게 됩니다. 하지만 묵시적 변환이 생길수록 코드의 결과를 예측하기 어려워지기 때문에
코드의 명확함을 더하기 위하여 사용되는 키워드가 바로!! explicit 키워드인 것 입니다.
즉 아래와 같이 소스가 바뀌어야 정상 구동이 되는 것을 확인할 수 있습니다.
#include <iostream>
using namespace std;
class SoSimple
{
private:
int num1;
int num2;
public:
SoSimple(int n1, int n2)
:num1(n1), num2(n2)
{
}
explicit SoSimple(SoSimple ©)
:num1(copy.num1), num2(copy.num2)
{
cout << "SoSimple(SoSimple ©)가 호출됨\n";
}
void ShowSimpleData()
{
cout << num1 << endl << num2 << endl;
}
};
int main(void)
{
SoSimple sim1(15, 30);
cout << "생성 및 초기화 전" << endl;
SoSimple sim2(sim1);
cout << "생성 및 초기화 후" << endl;
sim2.ShowSimpleData();
return 0;
}
전 소스에서 SoSimple sim2 = sim1;의 부분을 explicit키워드를 사용하였기 때문에, SoSimple sim2(sim1);로
사용하여야 에러 없이 구동이 된다는 차이점입니다.
여기서 SoSimple sim2 = sim1;와 SoSimple sim2(sim1);은 같은 의미로 삽입되지만,
explicit키워드를 사용하기 전과 사용하기 후에 묵시적 변환을 막기 위한 키워드를 사용해 준 차이입니다.
추가적으로 int num1 = num2;와 int num1(num2);는 동일한 의미로 해석되는 것과 같은 이치인 것 입니다.
explicit키워드에 대한 간단한 설명은 이것으로 끝내도록 하겠습니다~
프로그래밍은 언제나 자기 자신이 직접 코딩 해보시고 차이점도 보시고 하셔야 한다는 점!!!
잊지마세용~
'지식창고 > 프로그래밍' 카테고리의 다른 글
(C++)friend키워드란? (0) | 2019.07.06 |
---|---|
(C++)mutable 키워드란? (0) | 2019.07.05 |
(C++)c++의 함수오버로딩이란? (0) | 2019.07.03 |
(C, C++)c, c++에서 참조자란? (0) | 2019.07.03 |
(C)namespace키워드의 사용방법과 의미 (0) | 2019.07.03 |