1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Chương 6: khuôn hình docx

23 389 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Khuôn hình hàm và khuôn hình lớp
Định dạng
Số trang 23
Dung lượng 120 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hi u đích chương này:ư c l i ích c a vi c s d ng khuôn hình h m v khuôn hình l p ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình l

Trang 1

Ch ương 6 ng 6

khuôn hình (Template)

M c ích chục đích chương này: đích chương này: ương này:ng n y:ày:

1 Hi u đích chương này:ư c l i ích c a vi c s d ng khuôn hình h m v khuôn hình l p ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày: ày: ớp để viết chương đích chương này: vi t chết chương ương này:ngtrình

2 Bi t cách t o v s d ng m t khuôn hình h m v khuôn hình l p ết chương ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ày: ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ột khuôn hình hàm và khuôn hình lớp ày: ày: ớp để viết chương

3 Khái ni m các tham s ki u v các tham s bi u th c trong khuôn hình h m, khuôn hìnhệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ức trong khuôn hình hàm, khuôn hình ày:

l p.ớp để viết chương

4 Định nghĩa chồng khuôn hình hàm nh ngh a ch ng khuôn hình h m ĩa chồng khuôn hình hàm ồng khuôn hình hàm ày:

5 C th hoá m t khuôn hình h m, m t h m th nh ph n c a khuôn hình l p ục đích chương này: ột khuôn hình hàm và khuôn hình lớp ày: ột khuôn hình hàm và khuôn hình lớp ày: ày: ần của khuôn hình lớp ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương

6 Thu t toán s n sinh m t th hi n h m (h m th hi n) c a m t khuôn hình h m ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp ày:

7 Các v n đích chương này: khác c a l p trình hủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ướp để viết chươngng đích chương này: i tư ng liên quan đích chương này:ết chươngn khuôn hình l p.ớp để viết chương

1 Khuôn hình h m àm

1.1 Khuôn hình h m l gì? àm àm

Ta ã bi t đích chương này: ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng h m cho phép dùng m t tên duy nh t cho nhi u h m th c hi nĩa chồng khuôn hình hàm ồng khuôn hình hàm ày: ột khuôn hình hàm và khuôn hình lớp ày: ực hiện ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chươngcác công vi c khác nhau Khái ni m khuôn hình h m c ng cho phép s d ng cùng m t tên duyệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ũng cho phép sử dụng cùng một tên duy ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ột khuôn hình hàm và khuôn hình lớp

nh t đích chương này: th c hi n các công vi c khác nhau, tuy nhiên so v i ực hiện ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng h m, nó có ph nĩa chồng khuôn hình hàm ồng khuôn hình hàm ày: ần của khuôn hình lớp

m nh h n v ch t ch h n; m nh h n vì ch c n vi t ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ơng này: ày: ơng này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ơng này: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ần của khuôn hình lớp ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a khuôn hình h m m t l n, r i sauĩa chồng khuôn hình hàm ày: ột khuôn hình hàm và khuôn hình lớp ần của khuôn hình lớp ồng khuôn hình hàm

ó ch ng trình biên d ch l m cho nó thích ng v i các ki u d li u khác nhau; ch t ch h n b iđích chương này: ương này: ịnh nghĩa chồng khuôn hình hàm ày: ức trong khuôn hình hàm, khuôn hình ớp để viết chương ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ơng này: ởi

vì d a theo khuôn hình h m, t t c các h m th hi n ực hiện ày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ư c sinh ra b i trình biên d ch s tởi ịnh nghĩa chồng khuôn hình hàm ương này:ng

ng v i cùng m t nh ngh a v nh v y s có cùng m t gi i thu t

ức trong khuôn hình hàm, khuôn hình ớp để viết chương ột khuôn hình hàm và khuôn hình lớp đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ày: ư ột khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm

1.2 T o m t khuôn hình h m ạo một khuôn hình hàm ột khuôn hình hàm àm

Gi thi t r ng chúng ta c n vi t m t h m ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương ằng chúng ta cần viết một hàm ần của khuôn hình lớp ết chương ột khuôn hình hàm và khuôn hình lớp ày: min đích chương này:ưa ra giá tr nh nh t trong hai giá tr có cùngịnh nghĩa chồng khuôn hình hàm ỏ nhất trong hai giá trị có cùng ịnh nghĩa chồng khuôn hình hàm

ki u Ta có th vi t m t ết chương ột khuôn hình hàm và khuôn hình lớp đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a nh th ĩa chồng khuôn hình hàm ư ết chương đích chương này: i v i ki u int nh sau: ớp để viết chương ư

int min (int a, int b) {

if (a < b) return a;

else return b;

}

Gi s , ta l i ph i vi t ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a h m ĩa chồng khuôn hình hàm ày: min() cho ki u double,float,char,char*

float min(float a, float b) {

if (a < b) return a;

else b; }

N u ti p t c nh v y, s có khuynh hết chương ết chương ục đích chương này: ư ướp để viết chươngng ph i vi t r t nhi u ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a h m ho n to nĩa chồng khuôn hình hàm ày: ày: ày:

tương này:ng t nhau; ch có ki u d li u các tham s l thay ực hiện ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: đích chương này:ổi Các chương trình biên dịch C++ hiệni Các chương này:ng trình biên d ch C++ hi nịnh nghĩa chồng khuôn hình hàm ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương

có cho phép gi i quy t ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương đích chương này:ơng này:n gi n v n ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm đích chương này: trên b ng cách ằng chúng ta cần viết một hàm đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t khuôn hình h m duy nh tĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày:theo cách nh sau: ư

#include <iostream.h>

//t o m t khuôn hình h m ạo một khuôn hình hàm ột khuôn hình hàm àm

template <class T> T min(T a, T b) {

if (a < b) return a;

else return b;

}

Trang 2

So sánh v i ớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a h m thông thĩa chồng khuôn hình hàm ày: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng, ta th y ch có dòng ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau đích chương này:ần của khuôn hình lớp u tiên b thay ịnh nghĩa chồng khuôn hình hàm đích chương này:ổi Các chương trình biên dịch C++ hiệni:

template <class T> T min (T a, T b)

trong đó

template<class T>

xác đích chương này:ịnh nghĩa chồng khuôn hình hàm nh r ng ó l m t khuôn hình v i m t tham s ki u T;ằng chúng ta cần viết một hàm đích chương này: ày: ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ột khuôn hình hàm và khuôn hình lớp

Ph n còn l i ần của khuôn hình lớp ạo và sử dụng một khuôn hình hàm và khuôn hình lớp

T min(T a, T b)

nói r ng, min() l m t h m v i hai tham s hình th c ki u ằng chúng ta cần viết một hàm ày: ột khuôn hình hàm và khuôn hình lớp ày: ớp để viết chương ức trong khuôn hình hàm, khuôn hình T v có giá tr tr v c ng l ki uày: ịnh nghĩa chồng khuôn hình hàm ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ũng cho phép sử dụng cùng một tên duy ày:

T

1.3 S d ng khuôn hình h m ử dụng khuôn hình hàm ụng khuôn hình hàm àm

1.3.1 Khuôn hình h m cho ki u d li u c s àm ểu dữ liệu cơ sở ữ liệu cơ sở ệu cơ sở ơ sở ở

s d ng khuôn hình h m

Đ ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày: min() v a t o ra, ch c n s d ng h m ừa tạo ra, chỉ cần sử dụng hàm ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ần của khuôn hình lớp ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày: min() trong nh ngữ liệu khác nhau; chặt chẽ hơn bởi

i u ki n phù h p ( ây có ngh a l hai tham s c a h m có cùng ki u d li u) Nh v y, n uđích chương này: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ởi đích chương này: ĩa chồng khuôn hình hàm ày: ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ư ết chươngtrong m t chột khuôn hình hàm và khuôn hình lớp ương này:ng trình có hai tham s nguyên n v p, v i l i g i ày: ớp để viết chương ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi min(n,p) chương này:ng trình biên d chịnh nghĩa chồng khuôn hình hàm

s t ực hiện đích chương này:ột khuôn hình hàm và khuôn hình lớp ng s n sinh ra h m ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: min() (ta g i l m t h m th hi n) tọi ày: ột khuôn hình hàm và khuôn hình lớp ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ương này:ng ng v i hai tham s ki uức trong khuôn hình hàm, khuôn hình ớp để viết chươngnguyên int N u chúng ta g i ết chương ọi min() v i hai tham s ki u ớp để viết chương float, chương này:ng trình biên d ch c ng sịnh nghĩa chồng khuôn hình hàm ũng cho phép sử dụng cùng một tên duy

t ực hiện đích chương này:ột khuôn hình hàm và khuôn hình lớp ng s n sinh m t h m th hi n ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương min khác tương này:ng ng v i các tham s ki u ức trong khuôn hình hàm, khuôn hình ớp để viết chương float v c th ày: ức trong khuôn hình hàm, khuôn hình ết chươngSau ây l m t ví d ho n ch nh: đích chương này: ày: ột khuôn hình hàm và khuôn hình lớp ục đích chương này: ày: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau

Ví d 6.1 ụng khuôn hình hàm

/*template1.cpp*/

#include <iostream.h>

#include <conio.h>

//t o m t khuôn hình h m ạo một khuôn hình hàm ột khuôn hình hàm àm

template <class T> T min(T a, T b) {

cout<<"min (n, p) = "<<min (n, p)<<"\n";//int min(int, int)

cout<<"min (x, y) = "<<min (x, y)<<"\n";//float min(float, float)

Trang 3

min (adr1, adr2) = DHBK

K t qu khá thú v vì ta hy v ng h m min() tr v xâu "CDSD" Th c t , v i bi u th cết chương ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ịnh nghĩa chồng khuôn hình hàm ọi ày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ực hiện ết chương ớp để viết chương ức trong khuôn hình hàm, khuôn hìnhmin(adr1, adr2) , chương này:ng trình biên d ch ã sinh ra h m th hi n sau ây: ịnh nghĩa chồng khuôn hình hàm đích chương này: ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:

char * min(char * a, char * b) {

1.3.3 Khuôn hình h m min v i ki u d li u l p àm ới kiểu dữ liệu lớp ểu dữ liệu cơ sở ữ liệu cơ sở ệu cơ sở ới kiểu dữ liệu lớp

áp d ng khuôn hình h m

Đ ục đích chương này: ày: min() trên v i ki u l p, c n ph i nh ngh a l p sao cho cóởi ớp để viết chương ớp để viết chương ần của khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ớp để viết chương

th áp d ng phép toán so sánh ục đích chương này: “<” v i các ớp để viết chương đích chương này: i tư ng c a l p n y, ngh a l ta ph i ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương ày: ĩa chồng khuôn hình hàm ày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m tĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp

h m toán t ày: ử dụng khuôn hình hàm và khuôn hình lớp để viết chương operator < cho l p Sau ây l m t ví d minh ho : ớp để viết chương đích chương này: ày: ột khuôn hình hàm và khuôn hình lớp ục đích chương này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp

Trang 4

vect(int abs =0, int ord = 0) { x= abs, y= ord;}

void display() { cout <<x<<" "<<y<<"\n"; }

friend int operator < (vect , vect);

};

int operator < (vect a, vect b) {

return a.x*a.x + a.y*a.y < b.x*b.x + b.y*b.y;

N u ta áp d ng khuôn hình h m ết chương ục đích chương này: ày: min() đích chương này: i v i m t l p m ch a ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ày: ư đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a toán t “<”,ĩa chồng khuôn hình hàm ử dụng khuôn hình hàm và khuôn hình lớp để viết chương

chương này:ng trình biên d ch s ịnh nghĩa chồng khuôn hình hàm đích chương này:ưa ra m t thông báo l i tột khuôn hình hàm và khuôn hình lớp ỗi tương tự như việc định nghĩa một hàm ương này:ng t nh vi c ực hiện ư ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t h m ĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày: min()cho ki u l p ó.ớp để viết chương đích chương này:

1.4 Các tham s ki u c a khuôn hình h m ố kiểu của khuôn hình hàm ểu dữ liệu cơ sở ủa khuôn hình hàm àm

Ph n n y trình b y cách ần của khuôn hình lớp ày: ày: đích chương này:ưa v o các tham s ki u trong m t khuôn hình h m, ày: ột khuôn hình hàm và khuôn hình lớp ày: đích chương này: chương này:ngtrình biên d ch s n sinh m t h m th hi n ịnh nghĩa chồng khuôn hình hàm ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương

1.4.1 Các tham s ki u trong ố kiểu của khuôn hình hàm ểu dữ liệu cơ sở định nghĩa khuôn hình hàm nh ngh a khuôn hình h m ĩa khuôn hình hàm àm

M t cách t ng quát, khuôn hình h m có th có m t hay nhi u tham s ki u, v i m i tham sột khuôn hình hàm và khuôn hình lớp ổi Các chương trình biên dịch C++ hiện ày: ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ỗi tương tự như việc định nghĩa một hàm

n y có t khoá ày: ừa tạo ra, chỉ cần sử dụng hàm class i li n trđích chương này: ướp để viết chươngc, ch ng h n nh : ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ư

template <class T, class U> int fct (T a, T *b, U c) { }

Các tham s n y có th ày: đích chương này: ởi b t k âu trong nh ngh a c a khuôn hình h m, ngh a l : ỳ đâu trong định nghĩa của khuôn hình hàm, nghĩa là: đích chương này: đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ĩa chồng khuôn hình hàm ày:Trong dòng tiêu đích chương này: ( nh ã ch ra trong ví d trên) ư đích chương này: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ục đích chương này:

Trong các khai báo các bi n c c b ết chương ục đích chương này: ột khuôn hình hàm và khuôn hình lớp

(i) Trong các ch th th c hi n ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ịnh nghĩa chồng khuôn hình hàm ực hiện ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương

Ch ng h n: ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp

template <class T, class U> int fct (T a, T *b, U c) {

T x; //bi n c c b x ki u T ến cục bộ x kiểu T ụ sử dụng khuôn hình hàm min ột khuôn hình hàm ểu T

U *adr; //bi n c c b adr ki u U * ến cục bộ x kiểu T ụ sử dụng khuôn hình hàm min ột khuôn hình hàm ểu T

Trang 5

hình th c trong ức trong khuôn hình hàm, khuôn hình template< >

Khuôn hình h m sau ây th c hi n trao ày: đích chương này: ực hiện ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ổi Các chương trình biên dịch C++ hiện ột khuôn hình hàm và khuôn hình lớp i n i dung c a hai bi n ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ết chương

Ví d 6.4 ụng khuôn hình hàm

/*templat5.cpp*/

#include <iostream.h>

#include <conio.h>

// đ nh ngh a khuôn hình h m ĩa khuôn hình hàm đổi chỗ nội dung hai biến với kiểu bất kỳ àm đổi chỗ nội dung hai biến với kiểu bất kỳ i ch n i dung hai bi n v i ki u b t k ỗi ột khuôn hình hàm ến cục bộ x kiểu T ớp vect ểu T ấp phát một mảng 10 thành phần kiểu T n = sizeof (T); ỳ

template <class X> void swap(X &a, X &b) {

cout<<"I J ban dau: "<<i<<" "<<j<<endl;

cout<<"X Y ban dau: "<<x<<" "<<y<<endl;

swap(i,j);// đổi chỗ nội dung hai biến với kiểu bất kỳ i ch hai s nguyên ỗi ố nguyên

swap(x,y); // đổi chỗ nội dung hai biến với kiểu bất kỳ i ch hai s nguyên ỗi ố nguyên

cout<<"I J sau khi doi cho: "<<i<<" "<<j<<endl;

Trang 6

cout<<"X Y sau khi doi cho: "<<x<<" "<<y<<endl;

getch();

}

I J ban dau: 10 20

X Y ban dau: 10.1 23.1

I J sau khi doi cho: 20 10

X Y sau khi doi cho: 23.1 10.1

1.5 Gi i thu t s n sinh m t h m th hi n ải thuật sản sinh một hàm thể hiện ật sản sinh một hàm thể hiện ải thuật sản sinh một hàm thể hiện ột khuôn hình hàm àm ểu dữ liệu cơ sở ệu cơ sở

Tr l i khuôn hình h m min(): ởi ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ày:

template <class T> T min(T a, T b) {

câu h i ỏ nhất trong hai giá trị có cùng đích chương này: t ra l : chày: ương này:ng trình d ch s l m gì khi g p l i g i ki u nh l ịnh nghĩa chồng khuôn hình hàm ày: ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi ư ày: min(n,c)? Câu

tr l i d a trên hai nguyên t c sau ây:ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ực hiện ắc sau đây: đích chương này:

(i) C++ quy đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ph i có m t s tản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ực hiện ương này:ng ng chính xác gi a ki u c a tham s hình th c vức trong khuôn hình hàm, khuôn hình ữ liệu khác nhau; chặt chẽ hơn bởi ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ức trong khuôn hình hàm, khuôn hình ày:

ki u tham s th c s ực hiện ực hiện đích chương này:ư c truy n cho h m, t c l ta ch có th s d ng khuôn hình h mày: ắc sau đây: ày: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày:min() trong các l i g i v i hai tham s có cùng ki u L i g i ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi ớp để viết chương ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi min(n, c) không đích chương này:ư c ch p

nh n v s gây ra l i biên d ch ày: ỗi tương tự như việc định nghĩa một hàm ịnh nghĩa chồng khuôn hình hàm

(ii) C++ th m chí còn không cho phép các chuy n ki u thông thường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng nh l : ư ày: T th nh const ày: Thay T[] th nh ày: T * , nh ng trữ liệu khác nhau; chặt chẽ hơn bởi ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p ho n to n ày: ày: đích chương này:ư c phép trong đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng h m ĩa chồng khuôn hình hàm ồng khuôn hình hàm ày:

Ta tham kh o o n chản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm đích chương này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ương này:ng trình sau ây:đích chương này:

min (t, adi) //l i ỗi

1.6 Kh i t o các bi n có ki u d li u chu n ở ạo một khuôn hình hàm ến có kiểu dữ liệu chuẩn ểu dữ liệu cơ sở ữ liệu cơ sở ệu cơ sở ẩn

Trong khuôn hình h m, tham s ki u có th tày: ương này:ng ng khi thì m t ki u d li u chu n, khiức trong khuôn hình hàm, khuôn hình ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ẩn, khithì m t ki u d li u l p S l m gì khi ta c n ph i khai báo bên trong khuôn hình h m m t ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương ày: ần của khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ột khuôn hình hàm và khuôn hình lớp đích chương này: i

tư ng v truy n m t hay nhi u tham s cho h m thi t l p c a l p Xem ví d sau ây: ày: ột khuôn hình hàm và khuôn hình lớp ày: ết chương ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương ục đích chương này: đích chương này:

Trang 7

template <class T> fct(T a) {

T x(3);//x l m t àm ột khuôn hình hàm đố nguyên ượng cục bộ kiểu T mà chúng ta xây dựng bằng cách i t ng c c b ki u T m chúng ta xây d ng b ng cách ụ sử dụng khuôn hình hàm min ột khuôn hình hàm ểu T àm ựng bằng cách ằng cách

//truy n giá tr 3 cho h m thi t l p ền giá trị 3 cho hàm thiết lập àm ến cục bộ x kiểu T ập

}

Khi s d ng h m fct() cho m t ki u d li u l p, m i vi c ử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày: ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương ọi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: u t t đích chương này:ẹp Ngược lại, nếu chúngp Ngư c l i, n u chúngạo và sử dụng một khuôn hình hàm và khuôn hình lớp ết chương

ta c g ng áp d ng cho m t ki u d li u chu n, ch ng h n nh ắc sau đây: ục đích chương này: ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ẩn, khi ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ư int, khi ó chđích chương này: ương này:ng trình d ch s nịnh nghĩa chồng khuôn hình hàm ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm sinh ra h m sau ây: ày: đích chương này:

M t cách tột khuôn hình hàm và khuôn hình lớp ương này:ng t : ực hiện

double x(3.5); //thay vì double x = 3.5;

char c('e'); //thay vì char c = 'e';

1.7 Các h n ch c a khuôn hình h m ạo một khuôn hình hàm ến có kiểu dữ liệu chuẩn ủa khuôn hình hàm àm

V nguyên t c, khi ắc sau đây: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t khuôn hình h m, m t tham s ki u có th tĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày: ột khuôn hình hàm và khuôn hình lớp ương này:ng ng v iức trong khuôn hình hàm, khuôn hình ớp để viết chương

b t k ki u d li u n o, cho dù ó l m t ki u chu n hay m t ki u l p do ngỳ đâu trong định nghĩa của khuôn hình hàm, nghĩa là: ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: đích chương này: ày: ột khuôn hình hàm và khuôn hình lớp ẩn, khi ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: i dùng đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a.ĩa chồng khuôn hình hàm

Do v y không th h n ch vi c th hi n ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: i v i m t s ki u d li u c th n o ó Ch ng h n,ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: ày: đích chương này: ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp

n u m t khuôn hình h m có dòng ết chương ột khuôn hình hàm và khuôn hình lớp ày: đích chương này:ần của khuôn hình lớp u tiên:

template <class T> void fct(T)

chúng ta có th g i ọi fct() v i m t tham s v i ki u b t k : ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ỳ đâu trong định nghĩa của khuôn hình hàm, nghĩa là: int, float, int *,int **, t * (t lày:

m t ki u d li u n o ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: đích chương này: y)

Tuy nhiên, chính nh ngh a bên trong khuôn hình h m l i ch a m t s y u t có th l m chođích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ày: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ức trong khuôn hình hàm, khuôn hình ột khuôn hình hàm và khuôn hình lớp ết chương ày:

vi c s n sinh h m th hi n không úng nh mong mu n Ta g i ó l các h n ch c a các khuônệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: ư ọi đích chương này: ày: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ết chương ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chươnghình h m.ày:

u tiên, chúng ta có th cho r ng m t tham s ki u có th t ng ng v i m t con tr DoĐần của khuôn hình lớp ằng chúng ta cần viết một hàm ột khuôn hình hàm và khuôn hình lớp ương này: ức trong khuôn hình hàm, khuôn hình ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ỏ nhất trong hai giá trị có cùng

ó, v i dòng tiêu :

đích chương này: ớp để viết chương đích chương này:

template <class T> void fct(T *)

ta ch có th g i fct() v i m t con tr ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ọi ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ỏ nhất trong hai giá trị có cùng đích chương này:ết chươngn m t ki u n o ó: ột khuôn hình hàm và khuôn hình lớp ày: đích chương này: int*, int **, t *, t **

Trong các trường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p khác, s gây ra các l i biên d ch Ngo i ra, trong ỗi tương tự như việc định nghĩa một hàm ịnh nghĩa chồng khuôn hình hàm ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a c a m tĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp khuôn hình h m, có th có các ch th không thích h p ày: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ịnh nghĩa chồng khuôn hình hàm đích chương này: i v i m t s ki u d li u nh t ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh

Ch ng h n, khuôn hình h m: ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ày:

template <class T> T min(T a, T b) {

đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ương này: ực hiện ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ày:

template <class T> void fct(T) {

T x(2, 5); /* đố nguyên ượng cục bộ kiểu T mà chúng ta xây dựng bằng cách i t ng c c b ụ sử dụng khuôn hình hàm min ột khuôn hình hàm đượng cục bộ kiểu T mà chúng ta xây dựng bằng cách c kh i t o b ng m t h m thi t l p v i ởi tạo bằng một hàm thiết lập với ạo một khuôn hình hàm ằng cách ột khuôn hình hàm àm ến cục bộ x kiểu T ập ớp vect

hai tham s */ ố nguyên

Trang 8

}

không th áp d ng cho các ki u d li u l p không có h m thi t l p v i hai tham s ục đích chương này: ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ớp để viết chương ày: ết chương ớp để viết chương

Tóm l i, m c dù không t n t i m t c ch hình th c ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ồng khuôn hình hàm ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ột khuôn hình hàm và khuôn hình lớp ơng này: ết chương ức trong khuôn hình hàm, khuôn hình đích chương này: h n ch kh n ng áp d ng c a cácạo và sử dụng một khuôn hình hàm và khuôn hình lớp ết chương ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ăng áp dụng của các ục đích chương này: ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chươngkhuôn hình h m, nh ng bên trong m i m t khuôn hình h m ày: ư ỗi tương tự như việc định nghĩa một hàm ột khuôn hình hàm và khuôn hình lớp ày: đích chương này: u có ch a nh ng nhân t ức trong khuôn hình hàm, khuôn hình ữ liệu khác nhau; chặt chẽ hơn bởi đích chương này: ngường, ta thấy chỉ có dòng đầu tiên bị thay đổi: i

ta có th bi t ết chương đích chương này:ư c khuôn hình h m ó có th ày: đích chương này: đích chương này:ư c áp d ng ục đích chương này: đích chương này:ết chươngn m c n o.ức trong khuôn hình hàm, khuôn hình ày:

1.8 Các tham s bi u th c c a m t khuôn hình h m ố kiểu của khuôn hình hàm ểu dữ liệu cơ sở ức của một khuôn hình hàm ủa khuôn hình hàm ột khuôn hình hàm àm

Trong đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a c a m t khuôn hình h m có th khai báo các tham s hình th c v i ki uĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp ày: ức trong khuôn hình hàm, khuôn hình ớp để viết chươngxác đích chương này:ịnh nghĩa chồng khuôn hình hàm nh Ta g i chúng l các tham s bi u th c Chọi ày: ức trong khuôn hình hàm, khuôn hình ương này:ng trình templat6.cpp sau ây nh ngh ađích chương này: đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm

m t khuôn hình h m cho phép ột khuôn hình hàm và khuôn hình lớp ày: đích chương này:ết chươngm s lư ng các ph n t nul (0 ần của khuôn hình lớp ử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: i v i các giá tr s ho c NULLớp để viết chương ịnh nghĩa chồng khuôn hình hàm

n u l con tr ) trong m t b ng v i ki u b t k v kích thết chương ày: ỏ nhất trong hai giá trị có cùng ột khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ớp để viết chương ỳ đâu trong định nghĩa của khuôn hình hàm, nghĩa là: ày: ướp để viết chươngc n o ó:ày: đích chương này:

cout<<" compte (t) = "<<compte(t, 5)<<"\n";

cout<<" compte (c) = "<<compte(c,6)<<"\n";

getch();

}

compte (t) = 2

compte (c) = 4

Ta có th nói r ng khuôn hình h m ằng chúng ta cần viết một hàm ày: compte nh ngh a m t h các h m đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ọi ày: compte trong ó ki uđích chương này:

c a tham s ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ần của khuôn hình lớp u tiên l tu ý (ày: ỳ đâu trong định nghĩa của khuôn hình hàm, nghĩa là: đích chương này:ư c xác đích chương này:ịnh nghĩa chồng khuôn hình hàm nh b i l i g i), còn ki u c a tham s th hai ã xácởi ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ức trong khuôn hình hàm, khuôn hình đích chương này:

nh (ki u

đích chương này:ịnh nghĩa chồng khuôn hình hàm int)

1.9 Định nghĩa khuôn hình hàm nh ngh a ch ng các khuôn hình h m ĩa khuôn hình hàm ồng các khuôn hình hàm àm

Gi ng nh vi c ư ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng các h m thông thĩa chồng khuôn hình hàm ồng khuôn hình hàm ày: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng, C++ cho phép đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng cácĩa chồng khuôn hình hàm ồng khuôn hình hàm khuôn hình h m, t c l có th ày: ức trong khuôn hình hàm, khuôn hình ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t hay nhi u khuôn hình h m có cùng tên nh ng v iĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ày: ư ớp để viết chươngcác tham s khác nhau i u ó s t o ra nhi u h các h m (m i khuôn hình h m tĐ đích chương này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ọi ày: ỗi tương tự như việc định nghĩa một hàm ày: ương này:ng ng v iức trong khuôn hình hàm, khuôn hình ớp để viết chương

m t h các h m) Ví d có ba h h m min: ột khuôn hình hàm và khuôn hình lớp ọi ày: ục đích chương này: ọi ày:

(iii) H th nh t bao g m các h m tìm giá tr nh nh t trong hai giá tr , ọi ức trong khuôn hình hàm, khuôn hình ồng khuôn hình hàm ày: ịnh nghĩa chồng khuôn hình hàm ỏ nhất trong hai giá trị có cùng ịnh nghĩa chồng khuôn hình hàm

(iv) H th hai tìm s nh nh t trong ba s , ọi ức trong khuôn hình hàm, khuôn hình ỏ nhất trong hai giá trị có cùng

(v) H th ba tìm s nh nh t trong m t m ng.ọi ức trong khuôn hình hàm, khuôn hình ỏ nhất trong hai giá trị có cùng ột khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm

Ví d 6.6 ụng khuôn hình hàm

Trang 9

template <class T> T min(T a, T b, T c) {

return min (min (a, b), c);

cout<<“min(n,p) = ”<<min(n,p)<<"\n"; // khuôn hình 1 int min(int, int)

cout<<“min(n,p,q) = ”<<min(n,p,q)<<"\n";//khuôn hình 2 int min(int,int,int)

cout<<“min(x,y) = ”<<min(x,y)<<"\n"; // khuôn hình 1 float min(float, float)

cout<<“min(x,y,z) = ”<<min(x,y,z)<<"\n";// khuôn hình 2 float min(float,float, float) cout<<“min(t,6) = ”<<min(t,6)<<"\n"; // khuôn hình 3 int min(int *, int)

cout<<“min(c,4) = ”<<min(c,4)<<"\n"; // khuôn hình 3 char min(char *, int)

Trang 10

Nh n xét ận xét

C ng gi ng nh ũng cho phép sử dụng cùng một tên duy ư đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng các h m, vi c ĩa chồng khuôn hình hàm ồng khuôn hình hàm ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng các khuôn hình h m cóĩa chồng khuôn hình hàm ồng khuôn hình hàm ày:

th gây ra s nh p nh ng trong vi c s n sinh các h m th hi n Ch ng h n v i b n h h m sauực hiện ằng chúng ta cần viết một hàm ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ớp để viết chương ọi ày:ây:

có th tương này:ng ng v i khuôn hình h m 1 hay khuôn hình h m 4.ức trong khuôn hình hàm, khuôn hình ớp để viết chương ày: ày:

1.10 C th hoá các h m th hi n ụng khuôn hình hàm ểu dữ liệu cơ sở àm ểu dữ liệu cơ sở ệu cơ sở

M t khuôn hình h m ột khuôn hình hàm và khuôn hình lớp ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t h các h m d a trên m t ĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ọi ày: ực hiện ột khuôn hình hàm và khuôn hình lớp đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a chung, nói cáchĩa chồng khuôn hình hàm khác chúng th c hi n theo cùng m t gi i thu t Trong m t s trực hiện ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p, s t ng quát n y có thực hiện ổi Các chương trình biên dịch C++ hiện ày:

ch u “r i ro”, ch ng h n nh trong trịnh nghĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ẳng hạn như: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ư ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p áp d ng khuôn hình h m ục đích chương này: ày: min cho ki u char* như

ã nói trên Khái ni m c th hoá, a ra m t gi i pháp kh c ph c các “r i ro” ki u nh trên.đích chương này: ởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ục đích chương này: đích chương này:ư ột khuôn hình hàm và khuôn hình lớp ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ắc sau đây: ục đích chương này: ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ưC++ cho phép ta cung c p, ngo i ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a c a m t khuôn hình h m, ĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a c a m t s cácĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ột khuôn hình hàm và khuôn hình lớp

h m cho m t s ki u d li u c a tham s Ta xét chày: ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ương này:ng trình ví d sau ây: ục đích chương này: đích chương này:

//h m min cho ki u xâu ký t àm ểu T ựng bằng cách

char * min (char *cha, char *chb) {

if (strcmp(cha, chb) <0) return cha;

Trang 11

char *adr1= "DHBK", *adr2 ="CD2D";

cout<<"min(n, p) = "<<min(n, p)<<"\n"; //khuôn hình h m àm

cout<<"min(adr1,adr2) = "<<min(adr1,adr2)<<endl; //h m char * min (char *, àm

h m cho m t s ki u d li u ày: ột khuôn hình hàm và khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: c bi t n o ó ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: đích chương này:

1.11 T ng k t v các khuôn hình h m ổng kết về các khuôn hình hàm ến có kiểu dữ liệu chuẩn ề các khuôn hình hàm àm

M t cách t ng quát, ta có th ột khuôn hình hàm và khuôn hình lớp ổi Các chương trình biên dịch C++ hiện đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t hay nhi u khuôn hình cùng tên, m i khuôn hìnhĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ỗi tương tự như việc định nghĩa một hàm

có các tham s ki u c ng nh l các tham s bi u th c riêng H n n a, có th cung c p các h mũng cho phép sử dụng cùng một tên duy ư ày: ức trong khuôn hình hàm, khuôn hình ơng này: ữ liệu khác nhau; chặt chẽ hơn bởi ày:thông thường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng v i cùng tên v i m t khuôn hình h m; trong trớp để viết chương ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ày: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p n y ta nói ó l s c thày: đích chương này: ày: ực hiện ục đích chương này:hoá m t h m th hi n.ột khuôn hình hàm và khuôn hình lớp ày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương

Trong trường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p t ng quát khi có ổi Các chương trình biên dịch C++ hiện đích chương này:ồng khuôn hình hàm ng th i c h m ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a ch ng v khuôn hình h m,ĩa chồng khuôn hình hàm ồng khuôn hình hàm ày: ày:

chương này:ng trình d ch l a ch n h m tịnh nghĩa chồng khuôn hình hàm ực hiện ọi ày: ương này:ng ng v i m t l i g i h m d a trên các nguyên t c sau ây:ức trong khuôn hình hàm, khuôn hình ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi ày: ực hiện ắc sau đây: đích chương này:(vi) Đần của khuôn hình lớp u tiên, ki m tra t t c các h m thông thản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng cùng tên v chú ý ày: đích chương này:ết chươngn s tực hiện ương này:ng ngức trong khuôn hình hàm, khuôn hìnhchính xác; n u ch có m t h m phù h p, h m ó ết chương ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ột khuôn hình hàm và khuôn hình lớp ày: ày: đích chương này: đích chương này:ư c ch n; còn n u có nhi u h m cùng thoọi ết chương ày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm mãn (có s nh p nh ng) s t o ra m t l i biên d ch v quá trình tìm ki m b gián o n ực hiện ằng chúng ta cần viết một hàm ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ột khuôn hình hàm và khuôn hình lớp ỗi tương tự như việc định nghĩa một hàm ịnh nghĩa chồng khuôn hình hàm ày: ết chương ịnh nghĩa chồng khuôn hình hàm đích chương này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp (vii) N u không có h m thông thết chương ày: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng n o tày: ương này:ng ng chính xác v i l i g i, khi ó ta ki m traức trong khuôn hình hàm, khuôn hình ớp để viết chương ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi đích chương này:

t t c các khuôn hình h m có cùng tên v i l i g i; n u ch có m t tản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: ớp để viết chương ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ọi ết chương ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ột khuôn hình hàm và khuôn hình lớp ương này:ng ng chính xác ức trong khuôn hình hàm, khuôn hình đích chương này:ư ctìm th y, h m th hi n tày: ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ương này:ng ng ức trong khuôn hình hàm, khuôn hình đích chương này:ư c s n sinh v v n ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày: đích chương này: đích chương này:ư c gi i quy t; còn n u cóản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương ết chươngnhi u h n m t khuôn hình h m( có s nh p nh ng) i u ó s gây ra l i biên d ch v quáơng này: ột khuôn hình hàm và khuôn hình lớp ày: ực hiện ằng chúng ta cần viết một hàm đích chương này: đích chương này: ỗi tương tự như việc định nghĩa một hàm ịnh nghĩa chồng khuôn hình hàm ày:trình tìm ki m b ng t ết chương ịnh nghĩa chồng khuôn hình hàm ắc sau đây:

(viii) Cu i cùng, n u không có khuôn hình h m phù h p, ta ki m tra m t l n n a t t c các h mết chương ày: ột khuôn hình hàm và khuôn hình lớp ần của khuôn hình lớp ữ liệu khác nhau; chặt chẽ hơn bởi ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ày:thông thường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng cùng tên v i l i goi Trong trớp để viết chương ờng, ta thấy chỉ có dòng đầu tiên bị thay đổi: ường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng h p n y chúng ta ph i tìm ki m s tày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm ết chương ực hiện ương này:ng ngức trong khuôn hình hàm, khuôn hình

d a v o c các chuy n ki u cho phép trong C/C++.ực hiện ày: ản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm

2 KHUôN hình l p ới kiểu dữ liệu lớp

2.1 Khuôn hình l p l gì? ới kiểu dữ liệu lớp àm

Bên c nh khái ni m khuôn hình h m, C++ còn cho phép ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a khuôn hình l p C ngĩa chồng khuôn hình hàm ớp để viết chương ũng cho phép sử dụng cùng một tên duy

gi ng nh khuôn hình h m, ây ta ch c n vi t ư ày: ởi đích chương này: ỉ cần viết định nghĩa khuôn hình hàm một lần, rồi sau ần của khuôn hình lớp ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a các khuôn hình l p m t l n r i sauĩa chồng khuôn hình hàm ớp để viết chương ột khuôn hình hàm và khuôn hình lớp ần của khuôn hình lớp ồng khuôn hình hàm

ó có th áp d ng chúng v i các ki u d li u khác nhau c các l p th hi n khác nhau.đích chương này: ục đích chương này: ớp để viết chương ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương đích chương này: đích chương này:ư ớp để viết chương ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương

2.2 T o m t khuôn hình l p ạo một khuôn hình hàm ột khuôn hình hàm ới kiểu dữ liệu lớp

Ta thường, ta thấy chỉ có dòng đầu tiên bị thay đổi: ng t o ra l p ạo và sử dụng một khuôn hình hàm và khuôn hình lớp ớp để viết chương point theo ki u ( ây ta b qua nh ngh a c a các h m th nh ph n ):ởi đích chương này: ỏ nhất trong hai giá trị có cùng đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ủa việc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương ày: ày: ần của khuôn hình lớp class point {

Trong ví d n y, ta ục đích chương này: ày: đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a m t l p các i m có to ĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ớp để viết chương đích chương này: ạo và sử dụng một khuôn hình hàm và khuôn hình lớp đích chương này:ột khuôn hình hàm và khuôn hình lớp nguyên N u mu n to ết chương ạo và sử dụng một khuôn hình hàm và khuôn hình lớp đích chương này:ột khuôn hình hàm và khuôn hình lớp đích chương này: i m

có ki u d li u khác (ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chương float, double, long, unsigned int) ta ph i nh ngh a m t l p khác b ngản sinh một thể hiện hàm (hàm thể hiện) của một khuôn hình hàm đích chương này:ịnh nghĩa chồng khuôn hình hàm ĩa chồng khuôn hình hàm ột khuôn hình hàm và khuôn hình lớp ớp để viết chương ằng chúng ta cần viết một hàm cách thay th , trong ết chương đích chương này:ịnh nghĩa chồng khuôn hình hàm nh ngh a l p point, t khoá ĩa chồng khuôn hình hàm ớp để viết chương ừa tạo ra, chỉ cần sử dụng hàm int b ng t khoá tằng chúng ta cần viết một hàm ừa tạo ra, chỉ cần sử dụng hàm ương này:ng ng v i ki u d li uức trong khuôn hình hàm, khuôn hình ớp để viết chương ữ liệu khác nhau; chặt chẽ hơn bởi ệc sử dụng khuôn hình hàm và khuôn hình lớp để viết chươngmong mu n

Ngày đăng: 12/12/2013, 15:15

HÌNH ẢNH LIÊN QUAN

Hình th c trong  ức trong khuôn hình hàm, khuôn hình template&lt;...&gt; . - Tài liệu Chương 6: khuôn hình docx
Hình th c trong ức trong khuôn hình hàm, khuôn hình template&lt;...&gt; (Trang 5)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w