Trong nội dung bài viết này bản thân đã lí giải bí quyết các bạn tiếp cận tới một kỹ năng khá là quan trọng đặc biệt mà lại mọi cá nhân học xây dựng C++ số đông phải ghi nhận và vận dụng nó. Đó chính là Template.

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

1. Template trong C++ là gì?

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

2. Cách áp dụng template so 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ọ bắt buộc dùng template nhỉ?

Các các bạn test xem ví dụ so với hàm swapVal() dưới đây rồi từ bỏ đúc kế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 cho 2 biến hóa hình dáng int, cho nên vì thế muốn đổi 2 vươn lên là với các dạng hình 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ụ bên trên chúng ta cũng có thể thấy câu hỏi hấp thụ ông xã liên tục những hàm các lần như thế mất nhiều thời và bộ nhớ lưu trữ của dòng sản phẩm tính, để buổi tối ưu bài toán hấp thụ ck họ đang up load chúng bằng phương pháp viết một hàm khuôn chủng loại swapVal nhỏng sau:

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

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

*

Qua ví dụ trên bạn cũng có thể thấy đẳng cấp tài liệu của phát triển thành định nghĩa đúng đắn được đưa ra quyết định ở thời khắc chạy, với lịch trình nthêm gọn gàng hơn tương đối nhiều so với hấp thụ chồng từng hàm swapVal()

Giải thích:

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

Xem thêm:

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

Một template , temp chỉ bao gồm tác vụ có mang cho một đẳng cấp tài liệu duy nhất do đó chúng ta cần yếu gán 1 thay đổi kiểu int cùng double đến cùng 1 kiểu dáng dữ liệu tempvào cùng một thời điểm.

Ví dụ:

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

Để giải quyết và xử lý điều này thì ta knhì báo thêm một kiểu dáng dữ liệu tổng thể vào nhỏng sau:

#include using namespace std;template void sum(temp intVal , temp1 doubleVal) {coutKhi chạy lịch trình ta vẫn nhận thấy tác dụng là 2.1, trường đoản cú phía trên chúng ta cũng có thể thấy rằngkhi ta ý muốn dùng từng nào hình dáng dữ liệu tổng thể thì knhị báo bấy nhiêu.

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

Tạm Kết

Vậy là bọn họ vẫn tìm hiểu được một phần của template trong C++, ví dụ là function template. Qua bài viết này mình mong mỏi chúng ta lưu giữ được cú pháp, các cần sử dụng của function template cùng mọi chú ý Khi viết hàm template.

Mình mong các có thể làm cho được bài tập nhỏ tuổi mình đưa ra sau đây: "Viết một hàm gồm áp dụng khuôn mẫu mã nhập vào một mảng có các cực hiếm bao gồm vẻ bên ngoài tùy ý cùng trả về quý hiếm bao gồm tần số xuất hiện những duy nhất vào mảng." (bạn như thế nào phải code thì comment email nhé)

Mong các bạn rate và phản hồi chủ kiến sinh sống bên dưới để mọi bài bác sau mình ra tốt hơn. Cảm ơn chúng ta hẹn gặp gỡ lại chúng ta vào phần tiếp sau Class Template.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *