Trang tài liệu
Khóa học C++ nền tảng
Chương 8. Cấu trúc và lớp
Đa hình tĩnh

Đa hình tĩnh

Đa hình tĩnh, còn được gọi là đa hình thời gian biên dịch, là một loại đa hình giải quyết các kiểu và lệnh gọi phương thức tại thời điểm biên dịch thay vì trong thời gian chạy. Điều này thường đạt được thông qua việc sử dụng nạp chồng hàm và khuôn mẫu trong C++.

Nạp chồng hàm

Nạp chồng hàm là cách tạo nhiều hàm có cùng tên nhưng khác danh sách tham số. Trình biên dịch xác định hàm chính xác để gọi dựa trên các loại và số lượng đối số được sử dụng khi hàm được gọi.

Ví dụ:

#include <iostream>

void print(int i) {
    std::cout << "Printing int: " << i << std::endl;
}

void print(double d) {
    std::cout << "Printing double: " << d << std::endl;
}

void print(const char* s) {
    std::cout << "Printing string: " << s << std::endl;
}

int main() {
    print(5);          // In cuộc gọi (int i)
    print(3.14);       // In cuộc gọi (double d)
    print("Hello");    // In cuộc gọi (const char* s)

    return 0;
}

Khuôm mẫu

Khuôn mẫu là một tính năng mạnh mẽ trong C++ cho phép bạn tạo các hàm hoặc lớp chung. Mã code thực tế cho các loại cụ thể được tạo tại thời điểm biên dịch, giúp tránh được chi phí hoạt động đa hình trong thời gian chạy. Việc sử dụng các khuôn mẫu là kỹ thuật chính để đạt được tính đa hình tĩnh trong C++.

Ví dụ:

#include <iostream>

// hàm khuôn mẫu để in bất kỳ loại nào
template<typename T>
void print(const T& value) {
    std::cout << "Printing value: " << value << std::endl;
}

int main() {
    print(42);           // in
    print(3.14159);      // gấp đôi 
    print("Hello");      // const char*

    return 0;
}

Tóm lại, đa hình tĩnh đạt được hành vi đa hình trong thời gian biên dịch bằng cách sử dụng nạp chồng hàm và khuôn mẫu, thay vì dựa vào thông tin thời gian chạy như đa hình động. Điều này có thể dẫn đến mã code hiệu quả hơn vì các cuộc gọi phương thức được giải quyết tại thời điểm biên dịch.