🌱 C/C++ Type Conversion - Ép kiểu
C/C++ cho phép chúng ta chuyển đổi dữ liệu của data type này sang data type khác. Điều này được gọi là Type Conversion hay Type Casting (Ép kiểu).
Có hai cách ép kiểu trong C/C++.
👉 Implicit Type Conversion
Trong tiếng việt thì Implicit được dịch là ngầm định, vì vậy Implicit Type Conversion là việc ép kiểu được thực hiện tự động bởi compiler. Tức là bản thân đoạn code của chúng ta không nói cho compiler biết là cần ép kiểu, nhưng nó sẽ tự làm điều đó.
Hãy xem xét các ví dụ dưới đây!
➤ Ví dụ 1, ép kiểu từ int sang double,
#include <iostream>
using namespace std;
int main()
{
// assigning an int value to num_int
int num_int = 9;
// declaring a double type variable
double num_double;
// implicit conversion
// assigning int value to a double variable
num_double = num_int;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
Run This Code
➥ Các bạn có thể bấm "Run This Code", kết quả hiển thị trên màn hình console như sau,
num_int = 9
num_double = 9
Trong chương trình trên, chúng ta đã gán một biến int cho một biến double một các trực tiếp.
num_double = num_int;
Ở đây thì giá trị int được chuyển đổi một cách tự động sang double (kích thước gấp đôi int) bởi compiler, trước khi nó được gán vào biến num_double.
➤ Ví dụ 2, ép kiểu từ double sang int
#include <iostream>
using namespace std;
int main()
{
int num_int;
double num_double = 9.99;
// implicit conversion
// assigning a double value to an int variable
num_int = num_double;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
Run This Code
➥ Các bạn có thể bấm "Run This Code", kết quả hiển thị trên màn hình console như sau,
num_int = 9
num_double = 9.99
Trong chương trình trên, chúng ta đã gán một biến double cho một biến int một các trực tiếp.
num_int = num_double;
Ở đây thì giá trị double được chuyển đổi một cách tự động sang int bởi compiler, trước khi nó được gán vào biến num_int, dễ thấy giá trị này chỉ lấy được phần nguyên.
➤ Mất dữ liệu khi ép kiểu
Như đã thấy từ ví dụ 2 ở trên, việc ép kiểu từ kiểu dữ liệu này sang kiểu dữ liệu khác dễ bị mất dữ liệu. Điều này xảy ra khi dữ liệu thuộc kiểu dữ liệu có kích thước lớn hơn được ép kiểu thành kiểu dữ liệu có kích thước nhỏ hơn.
👉 Explicit Type Conversion
Khi developer trực tiếp thực hiện việc ép kiểu một cách thủ công, tức là trực tiếp báo cho compiler biết chúng ta muốn ép kiểu, đó gọi là Explicit Type Conversion.
Có 3 cách chính để sử dụng Explicit Type Conversion trong C++,
- C-style type casting (cast notation).
- Function-style Casting (old C++ style type casting).
- Type conversion operators.
➤ C-style Type Casting
Cách ép kiểu này xuất phát từ ngôn ngữ lập trình C, cú pháp như sau,
(new_data_type)expression;
Ví dụ,
// initializing int variable
int num_int = 50;
// declaring double variable
double num_double;
// converting from int to double
num_double = (double)num_int;
➤ Function-style Casting
Còn được gọi là Function-like Notation, vì cú pháp giống dạng hàm.
data_type(expression);
Ví dụ,
// initializing int variable
int num_int = 50;
// declaring double variable
double num_double;
// converting from int to double
num_double = double(num_int);
➤ Type conversion operators
Bên cạnh 2 các ép kiểu kể trên, C++ còn hỗ trợ 4 toán tử dùng để ép kiểu.
- static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
Các toán tử này sẽ được giới thiệu ở những bài hướng dẫn sau.
>>>= Follow ngay =<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊