Template là gì trong c

      155

Trong nội dung bài viết này mình đã hướng dẫn cách các bạn tiếp cận tới một kỹ năng tương đối là quan trọng đặc biệt mà lại mỗi người học tập lập trình C++ số đông phải biết cùng vận dụng nó. Đó chính là Template.

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

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

Template(khuôn mẫu) là một trường đoản cú khóa trong C++, và là một trong những giao diện tài liệu trừu tượng tổng thể hóa cho những dạng hình dữ liệu int, float, double, bool...Template vào C++ có 2 các loại sẽ là function template và class template.Template góp người thiết kế tư tưởng tổng thể mang lại hàm và lớp vắt bởi phải nộp ông chồng (overloading) cho từng hàm hay cách làm cùng với gần như thứ hạng tài liệu không giống nhau.

2. Cách thực hiện 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 chúng ta phải dùng template nhỉ?

Các các bạn demo xem ví dụ đối với hàm swapVal() dưới đây rồi từ bỏ đúc rút nhấn xét đến riêng biệt 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 mang đến 2 đổi mới kiểu int, do đó hy vọng thay đổi 2 thay đổi với các hình dáng tài liệu double, char, string... họ phảioverloading nó thêm 1 lần nữa

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

Qua ví dụ trên bạn cũng có thể thấy Việc nạp ông chồng thường xuyên những hàm những lần như thế mất quá nhiều thời và bộ nhớ lưu trữ của dòng sản phẩm tính, để về tối ưu bài toán hấp thụ chồng chúng ta đã xử lí bọn chúng bằng cách viết một hàm khuôn mẫu swapVal nhỏng sau:

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

Chúng ta thử chạy coi 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"; //Hotline hàm swapVal() đối với 2 số nguim swapVal(intX, intY); cout Sau Khi chạy chương trình sẽ sở hữu kết quả:

*

Qua ví dụ bên trên chúng ta có thể thấy dạng hình dữ liệu của trở thành định nghĩa đúng mực được ra quyết định ngơi nghỉ thời điểm chạy, và công tác ngắn thêm gọn rộng rất nhiều so với nạp ông chồng từng hàm swapVal()

Giải thích:

Tiền tố khuôn mẫutemplate Tại trên đây class là vẻ bên ngoài hoặc sự phân lớp nên nó chưa phải là tự class họ dễ thấy nghỉ ngơi trong lập trình sẵn hướng đối tượng người dùng.C++ được cho phép áp dụng từ bỏ khóa "typename" ở trong phần tự khóa class, mặc dù chúng ta phải thực hiện từ bỏ khóa class vào đa số ngôi trường hợp.(Trong phần sau mình đã phân tích bao giờ cần sử dụng typename , lúc nào sử dụng class)Trong thân tư tưởng hàm, val được áp dụng hệt như một dạng hình bất kì trùng với loại tài liệu truyền vào.Từvallà tên trượng trưng cho class buộc phải rất có thể được thay thế sửa chữa bằng bất kể trường đoản cú làm sao không giống chúng ta mong mỏi.Định nghĩa khuôn chủng loại hàm:Khuôn mẫu mã hàm swapVal()là một trong tập vừa lòng những tư tưởng.khi họ chạy chương trình cùng với đối số truyền vào hàm swapVal() là kiểu int thì khi này trình biên dịch sẽ tạo nên tư tưởng một hàm swapVal(intvà a, intvà b) cơ mà ko phát hiện ra các quan niệm cho những đối số hình trạng float , double tuyệt string. Do vậy bạn có thể Kết luận được rằng trình biên dịch chỉ gây ra những quan niệm khi được đề nghị với ĐK ta đã tư tưởng mang lại toàn bộ những kiểu.Qua đó ta rất có thể thấy điểm mạnh thừa trội của template trong C++ là chúng ta viết một hàm định nghĩa nó sẽ làm việc cho toàn bộ các loại rất có thể bao gồm.call khuôn chủng loại hàmXét lời hotline hàm swapVal(intX,intY) cỗ biên dịch C++ sử dụng khuôn mẫu mã để có thể tạo quan niệm hàm mang lại nhì tmê mệt số int với giống như với toàn bộ những thứ hạng không giống.

Xem thêm: Nam Nữ Sinh Năm 19 76 Tuổi Con Gì, Tuổi Con Gì? Tuổi Bính Thìn Hợp Tuổi Nào, Màu Gì, Hướng Nào

Một số xem xét Khi viếthàmtemplate:

Một template , temp chỉ có tác vụ tư tưởng cho 1 hình dạng dữ liệu độc nhất cho nên vì thế bọn họ quan trọng gán 1 đổi thay hình trạng int và double cho cùng 1 phong cách dữ liệu tempvào thuộc 1 thời điểm.

Ví dụ:

#include using namespace std;template void sum(temp intVal , temp doubleVal) {coutCmùi hương trình vẫn báo lỗi nlỗi hình ảnh dưới

Để giải quyết và xử lý vấn đề này thì ta khai báo thêm 1 thứ hạng dữ liệu bao quát vào nhỏng sau:

#include using namespace std;template void sum(temp intVal , temp1 doubleVal) {coutkhi chạy lịch trình ta đã cảm nhận công dụng là 2.1, từ bỏ đây chúng ta có thể thấy rằngKhi ta ao ước cần sử dụng bao nhiêu loại dữ liệu tổng quát thì knhì báo bấy nhiêu.

Khi rước temp có tác dụng kiểu dáng tài liệu trả về đến hàm, chúng cũng chỉ nhấn thứ hạng dữ liệu của phát triển thành trả về theo kiểu tài liệu của phát triển thành truyền vào mà lại không trả về một thứ hạng dữ liệu không giống đượ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 chương trình ra 0 chính vì temp đã dấn mẫu mã tài liệu theo đổi thay x1 , x2 đã được định nghĩa trước vẻ bên ngoài int chính vì vậy cực hiếm trả về là 0 cơ mà cấp thiết trả về kết quả may mắn là 0.5, vày lúc trình biên dịch chạy nó đang tự động dấn đẳng cấp dữ liệu của biến đổi truyền vào. Vì vậy lúc viết khuôn hàm chủng loại họ nên cẩn thận trong ngôi trường phù hợp trả về công dụng nhỏng này nhé.

Tạm Kết

Vậy là chúng ta đang tìm hiểu được một trong những phần của template trong C++, ví dụ là function template. Qua nội dung bài viết này mình muốn các bạn nhớ được cú pháp, những cần sử dụng của function template cùng đa số xem xét Khi viết hàm template.

Mình ý muốn các hoàn toàn có thể làm được bài bác tập bé dại mình giới thiệu sau đây: "Viết một hàm bao gồm thực hiện khuôn chủng loại nhập vào một trong những mảng tất cả các giá trị tất cả kiểu dáng tùy ý cùng trả về giá trị bao gồm tần số lộ diện nhiều tốt nhất vào mảng." (các bạn làm sao nên code thì bình luận email nhé)

Mong các bạn rate với phản hồi chủ ý sinh hoạt bên dưới để những bài xích sau bản thân ra xuất sắc rộng. Cảm ơn chúng ta hứa gặp gỡ lại chúng ta vào phần tiếp theo Class Template.