Template C++ Là Gì

Trong nội dung bài viết này bản thân sẽ giải đáp cách các bạn tiếp cận cho tới một kỹ năng và kiến thức khá là đặc trưng mà mỗi người học xây dựng C++ đều phải biết và áp dụng nó. Đó chính là Template.

Bạn đang xem: Template c++ là gì

1. Template vào C++ là gì?

Template(khuôn mẫu) là 1 trong những từ khóa trong C++, và là một trong những kiểu tài liệu trừu tượng tổng thể hóa cho những kiểu dữ liệu int, float, double, bool...Template vào C++ gồm 2 một số loại đó là function template và class template.Template giúp người lập trình định nghĩa bao quát cho hàm và lớp cầm vì buộc phải nạp ông chồng (overloading) đến từng hàm hay thủ tục với phần đông kiểu tài liệu khác nhau.

2. Cách áp dụng template đối với hàm

Cú pháp khai báo hàm khuôn mẫu

template T someFunction(T arg1, ...) ...

Tại sao họ phải cần sử dụng template nhỉ?

Các các bạn thử xem ví dụ đối với hàm swapVal() tiếp sau đây rồi trường đoản cú rút ra thừa nhận xét mang đến riêng mình nhé.

void swapVal(int &a , int &b) int temp; temp = a; a = b; b = temp;

Hàm swapVal(int &a , int &b) chỉ áp dụng cho 2 biến đổi kiểu int, cho nên muốn đổi 2 biến chuyển với những kiểu dữ liệu double, char, string... Bọn họ phảioverloading nó thêm một lần nữa

void swapVal(double &a , double &b) double temp; temp = a; a = b; b = temp;

Qua ví dụ như trên bạn cũng có thể thấy câu hỏi nạp chồng liên tục những hàm những lần như vậy mất quá nhiều thời và bộ nhớ lưu trữ của lắp thêm tính, để tối ưu bài toán nạp chồng họ sẽ cập nhật chúng bằng cách viết một hàm khuôn mẫu swapVal như sau:

template void swapVal(val &a , val &b) val temp; temp = a; a = b; b = temp;

Chúng ta demo chạy xem sao nhé:

#include using namespace std;template void swapVal(val &a , val &b) val temp; temp = a; a = b; b = temp;int main(){ int intX = 2, intY = 3; double doubleX = 1.2, doubleY = 3.1; string str1 = "Code", str2 = "Learn"; //gọi hàm swapVal() đối với 2 số nguyên swapVal(intX, intY); cout sau thời điểm chạy chương trình sẽ có được kết quả:

*

Qua lấy một ví dụ trên bạn có thể thấy kiểu tài liệu của vươn lên là định nghĩa đúng chuẩn được đưa ra quyết định ở thời khắc chạy, và công tác ngắn gọn gàng hơn tương đối nhiều so cùng với nạp ông xã từng hàm swapVal()

Giải thích:

Tiền tố khuôn mẫutemplate Ở trên đây class là đẳng cấp hoặc sự phân lớp yêu cầu nó chưa phải là tự class chúng ta hay thấy sinh hoạt trong lập trình hướng đối tượng.C++ được cho phép sử dụng từ bỏ khóa "typename" ở chỗ từ khóa class, mặc dù nhiên bọn họ nên thực hiện từ khóa class trong phần đông trường hợp.(Trong phần sau mình vẫn nói rõ lúc nào dùng typename , lúc nào dùng class)Trong thân quan niệm hàm, val được sử dụng giống như một kiểu bất cứ trùng cùng với kiểu dữ liệu truyền vào.Từvallà tên trượng trưng mang đến class nên có thể được sửa chữa bằng bất kì từ làm sao khác bọn họ muốn.Định nghĩa khuôn mẫu mã hàm:Khuôn chủng loại hàm swapVal()là một tập hợp những định nghĩa.Khi họ chạy chương trình với đối số truyền vào hàm swapVal() là mẫu mã int thì khi này trình biên dịch sẽ phát sinh khái niệm một hàm swapVal(int& a, int& b) mà không tạo ra ra những định nghĩa cho các đối số hình dáng float , double hay string. Vày vậy chúng ta cũng có thể kết luận được rằng trình biên dịch chỉ phân phát sinh những định nghĩa lúc được yêu mong với điều kiện ta đã định nghĩa cho tất cả các kiểu.Qua kia ta rất có thể thấy điểm mạnh vượt trội của template vào C++ là bọn họ viết một hàm định nghĩa nó sẽ thao tác cho tất cả các kiểu có thể có.Gọi khuôn mẫu hàmXét lời hotline hàm swapVal(intX,intY) bộ biên dịch C++ sử dụng khuôn mẫu để tạo định nghĩa hàm cho hai tham số int và tương tự như với tất cả các thứ hạng khác.

Xem thêm: Vòng Xuyến Là Gì - ĐI Qua Vã²Ng XuyếN Cã³ PhảI Xi

Một số để ý khi viếthàmtemplate:

Một template , temp chỉ tất cả tác vụ định nghĩa cho một kiểu dữ liệu duy nhất vì đó bọn họ không thể gán 1 đổi thay kiểu int với double mang lại cùng 1 kiểu dữ liệu temptrong cùng 1 thời điểm.

Ví dụ:

#include using namespace std;template void sum(temp intVal , temp doubleVal) {coutChương trình sẽ báo lỗi như ảnh dưới

Để giải quyết và xử lý vấn đề kia thì ta khai báo thêm một kiểu tài liệu tổng quát lác vào như sau:

#include using namespace std;template void sum(temp intVal , temp1 doubleVal) {coutKhi chạy chương trình ta vẫn nhận được hiệu quả là 2.1, trường đoản cú đây bạn cũng có thể thấy rằngkhi ta ước ao dùng từng nào kiểu tài liệu tổng quát tháo thì khai báo bấy nhiêu.

Khi đem temp làm cho kiểu dữ liệu trả về mang đến hàm, chúng cũng chỉ thừa nhận kiểu tài liệu của đổi thay trả về theo kiểu dữ liệu của đổi mới truyền vào mà lại không trả về một kiểu tài liệu khác được

#include using namespace std;template temp thuong(temp x1, temp x2)return (x1*1.0)/x2;int main(){int x1 = 1 , x2 = 2;coutKết trái của công tác ra 0 cũng chính vì temp sẽ nhận kiểu dữ liệu theo biến chuyển x1 , x2 sẽ được quan niệm trước vẻ bên ngoài int chính vì thế giá trị trả về là 0 mà quan yếu trả về kết quả như mong ước là 0.5, vày khi trình biên dịch chạy nó sẽ tự động hóa nhận kiểu tài liệu của biến đổi truyền vào. Do vậy lúc viết khuôn hàm mẫu chúng ta nên cẩn trọng trong trường phù hợp trả về kết quả như này nhé.

Tạm Kết

Vậy là họ đã mày mò được 1 phần của template trong C++, ví dụ là function template. Qua nội dung bài viết này bản thân mong chúng ta nhớ được cú pháp, những dùng của function template với những xem xét khi viết hàm template.

Mình hy vọng các có thể làm được bài tập nhỏ mình đưa ra sau đây: "Viết một hàm có áp dụng khuôn chủng loại nhập vào trong 1 mảng có các giá trị tất cả kiểu tùy ý cùng trả về giá trị có số lần mở ra nhiều tốt nhất trong mảng." (bạn nào buộc phải code thì comment gmail nhé)

Mong chúng ta rate và bình luận ý con kiến ở bên dưới để những bài sau mình ra tốt hơn. Cảm ơn các bạn hẹn gặp mặt lại các bạn vào phần tiếp theo Class Template.