Template C++ là gì
Tìm hiểu về từ khoá template trong C++. Show Template là gì?Template là từ khóa trong C++, có thể hiểu rằng là nó 1 kiểu dữ liệu trừu tượng, đặc trưng cho các kiểu dữ liệu cơ bản. Template là từ khóa báo cho trình biên dịch rằng đoạn mã sau đây định nghĩa cho nhiều kiểu dữ liệu và mã nguồn của nó sẽ được compile sinh ra tương ứng cho từng kiểu dữ liệu trong quá trình biên dịch. Có 2 loại template cơ bản:
Function templatevoid Swap( int &x, int &y) { int Temp = x; x = y; y = Temp; } Với đoạn code trên dùng để hoán vị giữa 2 số nguyên, nếu cần hoán vị giữa 2 số kiểu template Vậy cách thức nó hoạt động ra sao, hãy xét hoạt động của trình biên dịch khị gặp lời gọi hàm Trong ví dụ trên đã chỉ ra cách khai báo hàm mẫu, trong đó:
Ngoài ra có thể dùng prototype cho nguyên mẫu hàm giống như làm cho các hàm thông thường template Trong ví dụ trên chỉ hoán ví giữa 2 tham số cùng kiểu, vậy với khác kiểu thì sau? Chỉ cần khai báo thêm 1 kiểu dữ liệu tổng quát: template Overloading Function TemplatesNguyên mẫu hàm (function template) đều có tính chất của 1 hàm thông thường, nó cho phép nạp chồng (overload function) template Lưu ý: muốn nạp chồng hàm thì các tham số truyền vào ở các hàm phải khác nhau Class templateXét ví dụ sau class Point { int x; int y; }; Nếu muốn khai báo khuôn mẫu lớp với kiểu tùy ý làm như sau template Lúc này nếu muốn khai báo 1 thể hiện Point Trong ví dụ trên là khai báo template Trong ví dụ trên, khi muốn định nghĩa hàm của 1 lớp mẫu ở file khác thì phải khai báo template Trong ví dụ trên Default typeXét ví dụ sau template Trong ví dụ trên khi khai báo thể hiện của khuôn mẫu lớp là Lưu ý: tham số kiểu mặc định phải nằm ngoài cùng bên phải trong danh sách các tham số kiểu mẫu Template và FriendNhư thường thấy các lớp và các hàm có thể được khai báo là friend của nhau. Đối với khuôn mẫu lớp cũng vậy, có thể khai báo friend giữa khuôn mẫu lớp và hàm toàn cục, hoặc hàm của các lớp khác,.. template Trong ví dụ trên thì hàm Template và thành viên tĩnhTương tự như nontemplate class, có thể định nghĩa thành viên tĩnh trong khuôn mẫu lớp, và thành viên tĩnh phải được khởi tạo ở phạm vi toàn cục. Nhưng thành viên tĩnh trong khuôn mẫu lớp khác với nontemplate class là thời điểm khởi tạo, đối với nontemplate class thì sẽ được khởi tạo khi bắt đầu chương trình, nhưng còn đối với khuôn mẫu lớp thì lại khởi tạo trong thời gian biên dịch. template Kết quả in ra sẽ là Đối với Như ở phần khuôn mẫu hàm thì “ template Ở đây class Q { public: typedef int A; }; Pointz; Còn nếu như bỏ “ template Lúc này template Template cho phép tổng quát hóa kiểu dữ liệu và đồng thời hỗ trợ thao tác, xử lý chuyên môn trên 1 kiểu hay nhiều kiểu nhất định template Lợi ích của việc dùng template để tổng quát hóa kiểu dữ liệuViệc sử dụng từ khóa Khi biên dịch, các hàm và lớp sẽ được phát sinh đầy đủ theo nhu cầu của chương trình trước khi được gọi thực thi nên tốc độ của chương trình sẽ giống như cài đặt nhiều hàm hay lớp độc lập cho mỗi kiểu dữ liệu tương ứng. |