Template c++ là gì, sử dụng template trong c++ thế nào (phần 1)
Trong nội dung bài viết này mình sẽ trả lời cách các bạn tiếp cận tới một kỹ năng và kiến thức tương đối là quan trọng mà mọi cá nhân học thiết kế C++ đầy đủ phải ghi nhận cùng áp dụng nó. Đó chính là Template.
Bạn đang xem: Template c++ là gì, sử dụng template trong c++ thế nào (phần 1)
1. Template trong C++ là gì?
Template(khuôn mẫu) là 1 trong những trường đoản cú khóa trong C++, cùng là 1 mẫu mã tài liệu trừu tượng tổng quát hóa cho những đẳng cấp dữ liệu int, float, double, bool...Template vào C++ có 2 nhiều loại sẽ là function template và class template.Template giúp tín đồ thiết kế có mang tổng quát đến hàm và lớp vắt vày phải nộp chồng (overloading) cho từng hàm tuyệt cách thức cùng với rất nhiều loại tài liệu khác nhau.2. Cách sử dụng template so với hàm
Cú pháp knhị báo hàm khuôn mẫutemplate T someFunction(T arg1, ...) ...
Tại sao bọn họ phải sử dụng template nhỉ?
Các bạn thử coi ví dụ so với hàm swapVal() sau đây rồi từ bỏ đúc kết dìm xét mang lại riêng rẽ bản thân nhé.
void swapVal(int &a , int &b) int temp; temp = a; a = b; b = temp;
Hàm swapVal(int &a , int &b) chỉ vận dụng mang đến 2 biến hóa kiểu int, vì vậy ý muốn đổi 2 đổi thay cùng với những kiểu dữ liệu double, char, string... chúng ta 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 bạn cũng có thể thấy câu hỏi hấp thụ ck liên tục các hàm nhiều lần điều này mất nhiều thời với bộ nhớ của sản phẩm tính, nhằm về tối ưu bài toán hấp thụ ông xã bọn họ sẽ xử lí chúng bằng cách viết một hàm khuôn mẫu swapVal nlỗi 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() so với 2 số nguyên ổn swapVal(intX, intY); cout Sau khi chạy lịch trình sẽ sở hữu kết quả:

Qua ví dụ trên bạn cũng có thể thấy hình trạng dữ liệu của biến đổi khái niệm đúng chuẩn được đưa ra quyết định sinh sống thời gian chạy, cùng lịch trình ngắn thêm gọn gàng hơn tương đối nhiều đối với nạp ông chồng từng hàm swapVal()
Giải thích:
Tiền tố khuôn mẫutemplate Ở đây class là phong cách hoặc sự phân lớp cho nên nó không hẳn là trường đoản cú class bọn họ dễ thấy sống vào lập trình hướng đối tượng người sử dụng.C++ có thể chấp nhận được thực hiện tự khóa "typename" ở vị trí trường đoản cú khóa class, tuy nhiên bọn họ đề xuất thực hiện trường đoản cú khóa class vào gần như ngôi trường vừa lòng.(Trong phần sau bản thân đã nói rõ khi nào sử dụng typename , khi nào dùng class)Trong thân định nghĩa hàm, val được thực hiện y hệt như một thứ hạng bất kỳ trùng cùng với vẻ bên ngoài dữ liệu truyền vào.Từvallà tên trượng trưng cho class bắt buộc có thể được thay thế bởi bất cứ từ nào không giống chúng ta muốn.Định nghĩa khuôn chủng loại hàm:Khuôn mẫu hàm swapVal()là 1 trong tập hòa hợp những quan niệm.Khi bọn họ chạy công tác cùng với đối số truyền vào hàm swapVal() là hình dáng int thì trong lúc này trình biên dịch vẫn gây ra định nghĩa một hàm swapVal(int& a, int& b) mà không vạc sinh ra những có mang cho những đối số hình trạng float , double giỏi string. Do vậy chúng ta có thể tóm lại được rằng trình biên dịch chỉ tạo ra những quan niệm Lúc được yêu cầu với điều kiện ta sẽ quan niệm mang đến tất cả các hình trạng.Qua kia ta hoàn toàn có thể thấy điểm mạnh thừa trội của template vào C++ là họ viết một hàm có mang nó sẽ thao tác làm việc mang đến tất cả những kiểu hoàn toàn có thể có.call khuôn chủng loại hàmXét lời hotline hàm swapVal(intX,intY) bộ biên dịch C++ sử dụng khuôn mẫu để khởi tạo tư tưởng hàm cho nhì tsay đắm số int cùng tương tự cùng với toàn bộ các hình trạng khác.Xem thêm:
Một số xem xét khi viếthàmtemplate:
Một template , temp chỉ bao gồm tác vụ khái niệm cho một kiểu dáng dữ liệu tuyệt nhất vì thế chúng ta không thể gán 1 thay đổi vẻ bên ngoài int và double đến cùng 1 phong cách dữ liệu temptrong 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 đã báo lỗi như hình ảnh dưới
Để giải quyết điều đó thì ta knhì báo thêm một đẳng cấp dữ liệu tổng thể vào nhỏng sau:
#include using namespace std;template void sum(temp intVal , temp1 doubleVal) {coutLúc chạy lịch trình ta đang nhận ra kết quả là 2.1, trường đoản cú đây bạn có thể thấy rằngLúc ta hy vọng sử dụng bao nhiêu kiểu dáng dữ liệu bao quát thì khai báo từng ấy.
lúc mang temp có tác dụng hình dáng tài liệu trả về mang lại hàm, chúng cũng chỉ dìm kiểu tài liệu của vươn lên là trả về theo kiểu tài liệu của biến đổi truyền vào nhưng mà ko trả về một thứ hạng dữ 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 chương trình ra 0 chính vì temp sẽ nhận hình dáng tài liệu theo biến đổi x1 , x2 đã được định nghĩa trước dạng hình int chính vì thế quý hiếm trả về là 0 nhưng thiết yếu trả về hiệu quả may mắn là 0.5, bởi vì Lúc trình biên dịch chạy nó đã tự động hóa thừa nhận kiểu dáng dữ liệu của phát triển thành truyền vào. Vì vậy Lúc viết khuôn hàm chủng loại bọn họ đề xuất cẩn trọng trong ngôi trường hòa hợp trả về tác dụng nhỏng này nhé.
Tạm Kết
Vậy là họ vẫn khám phá được một phần của template trong C++, rõ ràng là function template. Qua bài viết này mình mong mỏi các bạn nhớ được cú pháp, những dùng của function template với gần như xem xét Khi viết hàm template.
Mình ao ước những có thể làm được bài tập nhỏ bản thân chỉ dẫn sau đây: "Viết một hàm bao gồm áp dụng khuôn mẫu mã nhập vào một trong những mảng tất cả những quý hiếm bao gồm dạng hình tùy ý cùng trả về quý hiếm bao gồm tần số mở ra các độc nhất vào mảng." (chúng ta làm sao đề nghị code thì bình luận email nhé)
Mong chúng ta rate với bình luận chủ kiến sinh hoạt phía bên dưới để mọi bài sau bản thân ra tốt hơn. Cảm ơn chúng ta hứa chạm mặt lại chúng ta vào phần tiếp theo sau Class Template.
Chuyên mục: