logo

C++의 유형 캐스팅

이 섹션에서는 C++ 프로그래밍 언어에서 변수의 유형 캐스팅에 대해 설명합니다. 유형 캐스팅은 프로그램에서 한 데이터 유형을 다른 데이터 유형으로 변환하는 것을 의미합니다. 타입캐스팅은 두 가지 방법으로 수행될 수 있습니다: 컴파일러에 의해 자동으로 수행되고 프로그래머나 사용자에 의해 수동으로 수행됩니다. 유형 캐스팅은 유형 변환이라고도 합니다.

C++의 유형 캐스팅

예를 들어, 주어진 데이터가 정수 유형이고 이를 부동 소수점 유형으로 변환하려고 한다고 가정합니다. 따라서 int 데이터를 float 유형으로 수동으로 캐스팅해야 하며 이러한 유형의 캐스팅을 C++에서는 유형 캐스팅이라고 합니다.

 int num = 5; float x; x = float(num); x = 5.0 

2nd예:

 float num = 5.25; int x; x = int(num); Output: 5 

유형 캐스팅은 암시적 변환 또는 암시적 유형 캐스팅과 명시적 유형 변환 또는 명시적 유형 캐스팅의 두 가지 유형으로 나뉩니다.

암시적 유형 캐스팅 또는 암시적 유형 변환

  • 자동형 주조라고 알려져 있습니다.
  • 프로그래머나 사용자와 같은 외부 개입 없이 자동으로 한 데이터 유형에서 다른 데이터 유형으로 변환됩니다. 이는 컴파일러가 자동으로 한 데이터 유형을 다른 데이터 유형으로 변환한다는 의미입니다.
  • 모든 데이터 유형은 정보 손실 없이 자동으로 가장 큰 유형으로 업그레이드됩니다.
  • 두 변수가 서로 호환되는 경우에만 프로그램에 적용할 수 있습니다.
 char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc. 

참고: 암시적 유형 캐스팅은 낮은 데이터 유형에서 더 높은 데이터 유형으로 수행되어야 합니다. 그렇지 않으면 기본 데이터 유형에 영향을 미쳐 정밀도나 데이터가 손실될 수 있으며 컴파일러는 이에 대한 경고를 표시할 수 있습니다.

C++에서 암시적 유형 캐스팅을 사용하는 프로그램

C++에서 암시적 유형 캐스팅을 사용하여 한 변수를 다른 변수로 캐스팅하는 방법을 보여주는 예제를 만들어 보겠습니다.

 #include using namespace std; int main () { short x = 200; int y; y = x; cout << ' Implicit Type Casting ' << endl; cout << ' The value of x: ' << x << endl; cout << ' The value of y: ' << y << endl; int num = 20; char ch = 'a'; int res = 20 + 'a'; cout << ' Type casting char to int data type ('a' to 20): ' << res << endl; float val = num + 'A'; cout << ' Type casting from int data to float type: ' << val << endl; return 0; } 

산출:

 Implicit Type Casting The value of x: 200 The value of y: 200 Type casting char to int data type ('a' to 20): 117 Type casting from int data to float type: 85 

위 프로그램에서 짧은 데이터 유형 변수 x는 200이고 정수 변수 y를 선언했습니다. 그런 다음 x 값을 y에 할당하면 컴파일러가 자동으로 짧은 데이터 값 x를 y로 변환하여 y는 200을 반환합니다.

다음 표현식에서는 int형 변수 num을 20으로 선언했고, 문자형 변수 ch를 'a'로 선언했는데, 이는 정수값 97에 해당합니다. 그런 다음 이 두 변수를 추가하여 암시적 변환을 수행합니다. 표현식의 결과는 117입니다.

목록 인덱스

마찬가지로 세 번째 표현식에서는 정수 변수 num은 20, 문자 변수 ch는 65를 추가한 다음 결과를 float 변수 val에 할당합니다. 따라서 표현식의 결과는 컴파일러에 의해 자동으로 float 유형으로 변환됩니다.

명시적 유형 캐스팅 또는 명시적 유형 변환

  • 프로그램에서 수동 유형 캐스팅이라고도 합니다.
  • 프로그램의 한 데이터 유형에서 다른 유형으로 변경하기 위해 프로그래머나 사용자가 수동으로 캐스팅합니다. 이는 사용자가 프로그램의 요구 사항에 따라 한 데이터를 다른 데이터로 쉽게 전송할 수 있음을 의미합니다.
  • 변수의 호환성을 확인할 필요는 없습니다.
  • 이 캐스팅에서는 프로그램의 한 변수의 데이터 유형을 다른 변수로 업그레이드하거나 다운그레이드할 수 있습니다.
  • 형변환() 연산자를 사용하여 변수 유형을 변경합니다.

명시적 유형 캐스팅의 구문

 (type) expression; 

유형: 주어진 표현식을 변환하는 사용자 정의 데이터를 나타냅니다.

표현: 상수 값, 변수 또는 데이터 유형이 변환된 표현식을 나타냅니다.

예를 들어, 부동 소수점 숫자가 4.534이고 정수 값을 변환하려면 명령문은 다음과 같습니다.

 int num; num = (int) 4.534; // cast into int data type cout << num; 

위의 명령문이 실행되면 부동 소수점 값은 캐스팅() 연산자를 사용하여 정수 데이터 유형으로 캐스팅됩니다. 그리고 float 값은 소수 부분을 잘라내고 정수 값으로 4만 표시하는 정수 num에 할당됩니다.

C++에서 명시적 유형 캐스팅의 사용을 보여 주는 프로그램

문자열 분할 C++

C++ 프로그래밍 언어의 명시적 유형 캐스팅을 사용하여 하나의 유형 변수를 다른 유형으로 캐스팅하는 간단한 프로그램을 만들어 보겠습니다.

 #include using namespace std; int main () { // declaration of the variables int a, b; float res; a = 21; b = 5; cout << ' Implicit Type Casting: ' << endl; cout << ' Result: ' << a / b << endl; // it loses some information cout << ' 
 Explicit Type Casting: ' << endl; // use cast () operator to convert int data to float res = (float) 21 / 5; cout << ' The value of float variable (res): ' << res << endl; return 0; } 

산출:

 Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2 

위 프로그램에서는 값이 21과 2인 두 개의 정수 변수 a와 b를 사용합니다. 그런 다음 a를 b(21/2)로 나누어 4 int 유형 값을 반환합니다.

두 번째 표현식에서는 명시적 유형 캐스트 ​​메소드에서 캐스트 연산자를 사용하여 데이터 손실 없이 a와 b의 결과를 저장하는 float 유형 변수 res를 선언합니다.

캐스트 연산자를 사용하여 double 데이터를 int 및 float 유형으로 캐스트하는 프로그램

C++ 프로그래밍에서 이중 데이터를 float 및 int 유형으로 캐스팅하여 직사각형의 면적을 얻는 예를 고려해 보겠습니다.

문자열 연결
 #include using namespace std; int main () { // declaration of the variables double l, b; int area; // convert double data type to int type cout << ' The length of the rectangle is: ' <> l; cout << ' The breadth of the rectangle is: ' <> b; area = (int) l * b; // cast into int type cout << ' The area of the rectangle is: ' << area << endl; float res; // convert double data type to float type cout << ' 
 
 The length of the rectangle is: ' << l << endl; cout << ' The breadth of the rectangle is: ' << b << endl; res = (float) l * b; // cast into float type cout << ' The area of the rectangle is: ' << res; return 0; } 

산출:

 The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 740 The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 744.77 

Type Casting의 몇 가지 다른 유형

유형 캐스트에는 프로그램의 필요에 따라 하나의 데이터 유형을 다른 데이터 유형으로 강제 변환하는 캐스트 연산자가 있습니다. C++에는 네 가지 유형의 캐스트 연산자가 있습니다.

  1. Static_cast
  2. 동적_캐스트
  3. const_cast
  4. 재해석_캐스트

정적 캐스트:

static_cast는 한 데이터 유형을 다른 데이터 유형으로 변환하거나 캐스트하는 간단한 컴파일 타임 캐스트입니다. 이는 수행된 캐스트가 유효한지 여부를 런타임에 데이터 유형을 확인하지 않음을 의미합니다. 따라서 프로그래머나 사용자는 변환이 안전하고 유효한지 확인할 책임이 있습니다.

static_cast는 암시적 캐스트에 의해 수행되는 모든 변환을 수행할 수 있을 만큼 충분히 가능합니다. 또한 서로 관련된 클래스의 포인터 간 변환도 수행합니다(업캐스트 -> 파생 클래스에서 기본 클래스로 또는 다운캐스트 -> 기본 클래스에서 파생 클래스로).

정적 형변환 구문

 static_cast (expression); 

Static Cast 사용법을 시연하는 프로그램

C++ 프로그래밍에서 유형 캐스팅의 정적 캐스팅을 사용하는 간단한 예제를 만들어 보겠습니다.

대신에
 #include using namespace std; int main () { // declare a variable double l; l = 2.5 * 3.5 * 4.5; int tot; cout << ' Before using the static cast:' << endl; cout << ' The value of l = ' << l << endl; // use the static_cast to convert the data type tot = static_cast (l); cout << ' After using the static cast: ' << endl; cout << ' The value of tot = ' << tot << endl; return 0; } 

산출:

 Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39 

다이나믹 캐스트

Dynamic_cast는 클래스 포인터 및 참조에서만 한 유형 변수를 다른 유형 변수로 변환하는 데 사용되는 런타임 캐스트 연산자입니다. 이는 런타임 시 변수의 유효한 캐스팅을 확인하고 캐스팅에 실패하면 NULL 값을 반환한다는 의미입니다. 동적 캐스팅은 RTTI(런타임 유형 식별) 메커니즘을 기반으로 합니다.

C++에서 Dynamic Cast 사용법을 보여주는 프로그램

C++ 프로그래밍 언어로 Dynamic_cast를 수행하는 간단한 프로그램을 만들어 보겠습니다.

 #include using namespace std; class parent { public: virtual void print() { } }; class derived: public parent { }; int main () { // create an object ptr parent *ptr = new derived; // use the dynamic cast to convert class data derived* d = dynamic_cast (ptr); // check whether the dynamic cast is performed or not if ( d != NULL) { cout << ' Dynamic casting is done successfully'; } else { cout << ' Dynamic casting is not done successfully'; } } 

산출:

 Dynamic casting is done successfully. 

캐스트 유형을 재해석하다

reinterpret_cast 유형 캐스팅은 주어진 포인터가 서로 속하는지 여부에 관계없이 포인터를 다른 유형의 포인터로 캐스팅하는 데 사용됩니다. 이는 포인터 또는 포인터가 가리키는 데이터가 동일한지 여부를 확인하지 않음을 의미합니다. 또한 포인터를 정수 유형으로 캐스팅하거나 그 반대로 캐스팅합니다.

reinterpret_cast 유형의 구문

 reinterpret_cast expression; 

C++에서 Reinterpret Cast를 사용하는 프로그램

C++ 언어의 재해석을 사용하여 포인터 변환을 보여주는 프로그램을 작성해 보겠습니다.

 #include using namespace std; int main () { // declaration of the pointer variables int *pt = new int (65); // use reinterpre_cast operator to type cast the pointer variables char *ch = reinterpret_cast (pt); cout << ' The value of pt: ' << pt << endl; cout << ' The value of ch: ' << ch << endl; // get value of the defined variable using pointer cout << ' The value of *ptr: ' << *pt << endl; cout << ' The value of *ch: ' << *ch << endl; return 0; } 

산출:

 The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A 

Const Cast

char를 int로 변환 자바

const_cast는 소스 포인터의 const 동작을 변경하거나 조작하는 데 사용됩니다. 이는 const 포인터를 non-const 포인터로 설정하거나 const 포인터에서 const를 삭제하거나 제거하는 두 가지 방법으로 const를 수행할 수 있음을 의미합니다.

Const Cast 유형의 구문

 const_cast exp; 

C++에서 Const Cast를 사용하는 프로그램

C++에서 const_cast를 사용하여 소스 포인터를 캐스팅되지 않은 포인터로 캐스팅하는 프로그램을 작성해 보겠습니다.

 #include using namespace std; // define a function int disp(int *pt) { return (*pt * 10); } int main () { // declare a const variable const int num = 50; const int *pt = # // get the address of num // use const_cast to chnage the constness of the source pointer int *ptr = const_cast (pt); cout << ' The value of ptr cast: ' << disp(ptr); return 0; } 

산출:

 The value of ptr cast: 500