Trang chủ Chưa phân loạiC++ | Ép kiểu dữ liệu

C++ | Ép kiểu dữ liệu

bởi Admin
24 lượt xem 3 Phút đọc
Lập trình C++ cơ bản, nâng cao

Ép kiểu dữ liệu (type casting) trong C++ là quá trình chuyển đổi một biến từ kiểu dữ liệu này sang kiểu dữ liệu khác. Có hai loại ép kiểu dữ liệu chính trong C++:

  1. Ép kiểu ngầm định (Implicit Type Casting): Là quá trình chuyển đổi tự động do trình biên dịch thực hiện mà không cần sự can thiệp của lập trình viên. Điều này thường xảy ra khi một biểu thức chứa các toán hạng có kiểu dữ liệu khác nhau, và trình biên dịch sẽ chuyển đổi kiểu dữ liệu của một toán hạng nào đó để chúng phù hợp với nhau.
    int a = 5;
    double b = 6.2;
    double c = a + b;  // 'a' được tự động chuyển thành kiểu double trước khi thực hiện phép cộng
    
  2. Ép kiểu tường minh (Explicit Type Casting): Là quá trình ép kiểu do lập trình viên thực hiện bằng cách sử dụng các toán tử hoặc hàm để chuyển đổi kiểu dữ liệu một cách rõ ràng.

    C++ cung cấp bốn loại ép kiểu tường minh chính:

    • C-style cast: Sử dụng cú pháp (new_type)expression.
    • int a = 5;
      double b = (double)a;  // Ép kiểu a từ int sang double
      
    • static_cast: Dùng để ép kiểu khi có sự chuyển đổi rõ ràng và an toàn giữa các kiểu dữ liệu tương thích.
    • int a = 5;
      double b = static_cast<double>(a);  // Ép kiểu a từ int sang double
      
    • dynamic_cast: Dùng để ép kiểu đối tượng khi có sự chuyển đổi giữa các lớp có quan hệ kế thừa. Nó kiểm tra sự hợp lệ của ép kiểu tại thời điểm chạy (runtime).
    • class Base {
        virtual void foo() {}
      };
      
      class Derived : public Base {
      };
      
      Base* base = new Derived;
      Derived* derived = dynamic_cast<Derived*>(base);  // Ép kiểu base từ Base* sang Derived*
      
    • const_cast: Dùng để thêm hoặc loại bỏ thuộc tính const của biến.

    • const int a = 5;
      int* b = const_cast<int*>(&a);  // Loại bỏ const từ a
      
    • reinterpret_cast: Dùng để ép kiểu một cách thô bạo giữa các con trỏ hoặc giữa các kiểu không tương thích. Việc sử dụng nó có thể dẫn đến kết quả không lường trước và không nên dùng trừ khi thật sự cần thiết.
    • int a = 5;
      void* ptr = reinterpret_cast<void*>(&a);  // Ép kiểu a từ int* sang void*
      

Việc sử dụng ép kiểu cần phải được thực hiện cẩn thận để tránh các lỗi không mong muốn và đảm bảo tính đúng đắn của chương trình.

Để lại bình luận

Focus Mode

Đã phát hiện trình chặn quảng cáo

Vui lòng hỗ trợ chúng tôi bằng cách tắt tiện ích chặn quảng cáo (AdBlocker) trên trình duyệt của bạn khi truy cập trang web của chúng tôi.