You are on page 1of 15

CHƯƠNG 7: KHUÔN MẪU

(TEMPLATE)
NỘI DUNG

Khuôn mẫu (khuôn hình) trong C++ cho phép định


nghĩa tổng quát cho hàm và lớp.
Có 2 loại template cơ bản:
Function template: khuôn mẫu hàm
Class template: khuôn mẫu lớp
7.1. Khuôn mẫu hàm

Là một khuôn mẫu hàm, cho phép định nghĩa các
hàm tổng quát thao tác cho nhiều kiểu dữ liệu.
Với mỗi giá trị hợp lệ của đối số sẽ phát sinh một
hàm cụ thể gọi là hàm thể hiện
Định nghĩa khuôn mẫu hàm

template <class T1, class T2, ..., class Tn>


<Kiểu giá trị trả về> <tên khuôn mẫu hàm>(<ds tham
số>)
{
.....
}

Sử dụng khuôn mẫu hàm giống như hàm thông thường với
kiểu cụ thể tại thời điểm chạy chương trình.
Dòng 3: Tiền tố khuôn
mẫu, báo cho trình biên
dịch biết đằng sau là
khuôn mẫu, với T là
tham số kiểu. Có thể
thay “typename” bằng
“class”
Giả sử cần khai báo hai kiểu dữ liệu
<bt1> > <bt2> ? <bt1> : <bt2>

max = x > y ? x: y;

if(x > y)
max = x;
else
max = y;
7.2. Khuôn mẫu lớp

Là một khuôn mẫu lớp, cho phép định nghĩa các lớp
tổng quát cho nhiều kiểu dữ liệu.
Với mỗi giá trị của tham số kiểu sẽ phát sinh ra một
thể hiện là một lớp cụ thể
Định nghĩa khuôn mẫu lớp

template <class T1, class T2, ..., class Tn>


class <tên khuôn mẫu lớp>
{
<khai báo các thành phần>
};
Định nghĩa phương thức trong khuôn mẫu lớp

TH1: Định nghĩa trong khuôn mẫu lớp


 Định nghĩa như các phương thức bình thường, ki ểu của các thành
phần, tham số... có thể là kiểu trong danh sách tham số kiểu
TH2: Định nghĩa ngoài khuôn mẫu lớp
 Khai báo phương thức bên trong lớp
 Định nghĩa phương thức bên ngoài lớp theo mẫu:

template <class T,.....>


Kiểu_trả_về tên_lớp
<T,...>::tên_phương_thức(danh_sách_tham_số)
{

....
}
Khai báo đối tượng

Cú pháp:
<tên khuôn mẫu lớp><kiểu> <tên đối tượng>;
Ví dụ:
MT<int> a;
MT<float> b;
Sử dụng các phương thức của đối tượng không có gì
thay đổi.
 Tức là vẫn theo cú pháp:
<tên đối tượng>.<tên phương thức>
Ta có thể khai báo một
template cùng với một
kiểu dữ liệu chỉ định
trước:

You might also like