Bài tập

Ép kiểu tường minh trong C++ (Explicit type conversion)

Huy Erick

Trong ngôn ngữ lập trình C++, việc ép kiểu dữ liệu là một kỹ thuật quan trọng. Trước đó, chúng ta đã tìm hiểu về kỹ thuật ép kiểu ngầm định (Implicit type conversion). Hôm...

Trong ngôn ngữ lập trình C++, việc ép kiểu dữ liệu là một kỹ thuật quan trọng. Trước đó, chúng ta đã tìm hiểu về kỹ thuật ép kiểu ngầm định (Implicit type conversion). Hôm nay, mình sẽ giới thiệu thêm một cách ép kiểu dữ liệu khác, đó là Ép kiểu tường minh trong C++ (Explicit type conversion).

Ép kiểu tường minh trong C++

Trong bài học về ép kiểu ngầm định, bạn đã biết rằng trong một số trường hợp, trình biên dịch sẽ tự động chuyển đổi một giá trị từ một kiểu dữ liệu sang kiểu dữ liệu khác. Tuy nhiên, đối với những trường hợp muốn chuyển đổi giá trị sang một kiểu dữ liệu tương tự nhưng miền giá trị lớn hơn, ta cần sử dụng kỹ thuật ép kiểu tường minh.

Ví dụ, khi bạn thực hiện phép toán chia giữa hai số nguyên:

double d = 3 / 2;

Trong trường hợp này, hai toán hạng của phép chia đều là số nguyên, nên không có ép kiểu ngầm định. Kết quả của phép chia sẽ là 1, sau đó giá trị 1 sẽ được chuyển đổi ngầm định thành 1.0 và gán cho biến d.

Để khắc phục trường hợp này, bạn có thể chuyển đổi một trong hai toán hạng thành số chấm động để có kết quả đúng:

double d1 = 3.0 / 2; // Hoặc double d2 = 3 / 2.0;

Nếu bạn thực hiện phép chia giữa hai biến:

int n1 = 3; int n2 = 2; double d = n1 / n2;

Trong trường hợp này, bạn cần sử dụng kỹ thuật Ép kiểu tường minh để trình biên dịch có thể hiểu và chuyển đổi kiểu dữ liệu theo ý muốn của bạn.

"Ép kiểu tường minh (Explicit type conversion) là quá trình chuyển đổi kiểu dữ liệu một cách rõ ràng bởi lập trình viên, sử dụng toán tử ép kiểu (casting operator) để thực hiện việc chuyển đổi."

Trong ngôn ngữ C++, có 5 cách ép kiểu tường minh, bao gồm:

  • C-style casts
  • Static casts
  • Const casts
  • Dynamic casts
  • Reinterpret casts

Trong bài học này, chúng ta sẽ tập trung vào C-style casts và Static casts, hai cách phổ biến nhất trong C++.

C-style casts

Trong ngôn ngữ C chuẩn, việc ép kiểu được thực hiện thông qua toán tử (), và tên kiểu dữ liệu cần chuyển đổi được đặt bên trong.

Ví dụ:

#include  using namespace std;  int main() {     int n1 = 3;     int n2 = 2;     double d = (double)n1 / n2;      cout  d  endl;      return 0; }

Trong chương trình trên, biến n1 được ép kiểu từ kiểu int sang kiểu double thông qua ép kiểu tường minh C-style. Sau đó, các toán hạng của phép chia có kiểu double và kiểu int, nên toán hạng kiểu int sẽ được chuyển đổi ngầm định sang kiểu double. Kết quả của phép chia là một số chấm động kiểu double.

Ngôn ngữ C++ cho phép thực hiện ép kiểu tường minh C-style với cú pháp như một lời gọi hàm:

int n1 = 3; int n2 = 2; double d = double(n1) / n2;

Tuy nhiên, lưu ý rằng ép kiểu tường minh C-style không được trình biên dịch kiểm tra tại thời điểm biên dịch, nên trình biên dịch sẽ không đưa ra cảnh báo nếu có sự chuyển đổi không đúng.

Chúng tôi khuyến nghị tránh sử dụng ép kiểu tường minh C-style và thay thế nó bằng các kỹ thuật ép kiểu khác.

static_cast

Ngôn ngữ C++ có một toán tử ép kiểu gọi là static_cast. Bạn đã biết về nó từ bài học về ký tự trong C++:

#include  #include  // for std::setprecision() using namespace std;  int main() {     int n{ 75 };      cout  static_cast(n)  endl; // in ký tự với mã ASCII 75      char ch{ 'K' };     cout  static_cast(ch)  endl; // in mã ASCII của ký tự 'K'      return 0; }

Chương trình trên sử dụng toán tử ép kiểu static_cast trong C++ để chuyển đổi giữa một số nguyên và một ký tự.

Để sử dụng static_cast trong biểu thức, bạn có thể làm như sau:

#include  using namespace std;  int main() {     int n1 = 3;     int n2 = 2;     double d = static_cast(n1) / n2;      cout  d  endl;      return 0; }

Ưu điểm của toán tử static_cast là nó yêu cầu trình biên dịch kiểm tra kiểu dữ liệu tại thời điểm biên dịch chương trình, giúp hạn chế những lỗi không mong muốn.

Chúng tôi khuyến nghị nên sử dụng toán tử static_cast thay vì ép kiểu C-style.

Kết luận

Qua bài học này, bạn đã nắm được cách sử dụng phương pháp ép kiểu tường minh trong ngôn ngữ lập trình C++. Trong bài tiếp theo, mình sẽ giới thiệu về hàm và giá trị trả về trong C++.

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý để chúng ta có thể cùng phát triển. Hãy luôn thử thách bản thân và không ngại khó!

Thảo luận

Nếu bạn gặp khó khăn hoặc có bất kỳ thắc mắc nào về khóa học, hãy đặt câu hỏi trong phần Bình luận hoặc trong mục Hỏi & Đáp trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

1