Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
10Activity
0 of .
Results for:
No results containing your search query
P. 1
Template Trong C++

Template Trong C++

Ratings: (0)|Views: 495 |Likes:
Published by nhuquynh89

More info:

Published by: nhuquynh89 on Nov 13, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

12/26/2012

pdf

text

original

 
TÌM HIỂU TEMPLATE TRONG C++
Templates (mẫu) là một tính năng mới được giới thiệu bởi chuẩn ANSI-C++. Nếusử dụng một trình biên dịch C++ chưa tương thích với chuẩn này thì không thể sử dụngmẫu.
I) Các hàm mẫu:
Các mẫu cho phép tạo các hàm có thể chấp nhận bất kì kiểu dữ liệu nào làm thamsố và trả về giá trị mà không phải làm nạp chồng hàm với tất cả các kiểu dữ liệu có thể.
Khai báo mẫu của nó có thể là một trong hai kiểu sau:
 
template <class
identifier 
>
 
 function_declaration
;
template <typename
identifier 
>
 
 function_declaration
;sự khác biệt duy nhất giữa hai kiểu khai báo mẫu này là việc sử dụng từ khoá
class
hay
typename
, sự khác nhau giữa chúng là không rõ ràng vì cả hai đều có cùng một ý nghĩavà đều cho một kết quả như nhau.Ví dụ: để tạo một hàm mẫu trả về giá trị lớn hơn của hai đối tượng chúng ta có thể sửdụng:template <class T>T GetMax (Ta, Tb){return (a>b?a:b);}Ở dòng đầu tiên, chúng ta đã tạo một mẫu cho một kiểu dữ liệu tổng quát với tên
T
. Vìvậy trong hàm sau đó,
T
trở thành một kiểu dữ liệu hợp lệ và nó được sử dụng như làmột kiểu dữ liệu cho hai tham số
a
,
b
và giá trị trả về của hàm
GetMax
.
T
thực sự không biểu diễn một kiểu dữ liệu cụ thể nào, chúng ta có thể gọi hàm với bấtkì kiểu dữ liệu hợp lệ nào. Kiểu dữ liệu này sẽ đáp ứng như là
 pattern(mẫu)
và sẽ thaythế
T
bên trong hàm.
Cách thức để gọi một lớp mẫu với một kiểu dữ liệu mẫu như sau:
1.
function
 
<
type
> (
 parameters
);
 
2.
function
 
(
 parameters
);
Ví dụ: để gọi hàm
GetMax
và so sánh hai giá trị nguyên kiểu
int
chúng ta có thể viết:int x,y;GetMax <int> (x,y);
1
 
Ví d:
 
#include <iostream>Kết qu: 6using namespace std; 10template <class T>T GetMax (T a, T b){T result;result = (a>b)? a : b;return (result);}int main (){int i=5, j=6, k;long l=10, m=5, n;k=GetMax<int>(i,j);n=GetMax<long>(l,m);cout << k << endl;cout << n << endl;return 0;}Ở ví dụ trên chúng ta đã sử dụng cùng một hàm GetMax() với các tham số kiểu
int
long
chỉvới một phiên bản duy nhất của hàm. Như vậy có thể nói chúng ta đã viết một mẫu hàm và gọinó bằng hai kiểu khác nhau. Như bạn có thể thấy, bên trong mẫu hàm
GetMax()
kiểu
T
có thể được dùng để khai báo cácđối tượng mới:T result;Trong trường hợp cụ thể này kiểu dữ liệu tổng quát
T
được sử dụng như là tham số cho hàm
GetMax
, trình biên dịch có thể tự động tìm thấy kiểu dữ liệu nào phải truyền cho nó mà khôngcần bạn phải chỉ định
<int>
hay
<long>.
Bởi vậy chúng ta có thể viết:int i,j;GetMax (i,j);Cách này được sử dụng phổ biến hơn và cũng cho kết quả như vậy:
Cách 2:
#include <iostream>using namespace std;template <class T>T GetMax (T a, T b){return (a>b)? a : b;}int main ( ){int i=5, j=6, k;long l=10, m=5, n;k=GetMax (i,j);n=GetMax (l,m);cout << k << endl;cout << n << endl;2
 
return 0;}
Lưu ý:
Vì hàm mẫu của chúng ta chỉ dùng một kiểu dữ liệu (
class T
) và cả hai tham số củanó đều có cùng một kiểu, chúng ta không thể gọi hàm mẫu với tham số là hai đốitượng có kiểu khác nhau:int i;long l;k = GetMax (i,l); 
Chúng ta cũng có thể khiến cho hàm mẫu chấp nhận nhiều hơn một kiểu dữ liệutổng quát.Nhưng chú ý các phép toán trả về kiểu nào để ép kiểu cho đúng
!
Ví dụ:template <class T, class U>T GetMin (T a, U b){return (a<b?a:b);}Trong trường hợp này, hàm mẫu
GetMin()
chấp nhận hai tham số có kiểu khác nhau vàtrả về một đối tượng có cùng kiểu với tham số đầu tiên (
T
). Ví dụ, sau khi khai báo nhưtrên chúng ta có thể gọi hàm như sau:int i,j;long l;i = GetMin<int,long> (j,l);hoặc có thể ghi:i = GetMin (j,l);
II) Các lớp mẫu:
Chúng ta cũng có thể viết các lớp mẫu, một lớp mà có các thành viên dựa trên các kiểudữ liệu tổng quát không cần phải được định nghĩa ở thời điểm tạo lớp.Ví dụ:template <class T>class pair {T values [2];public:pair (T first, T second){values[0]=first; values[1]=second;}};
3

Activity (10)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Nhu Nguyễn Đình added this note
thank you so much
Min CuTin liked this
trầnh_47 liked this
missthom liked this
songvuive liked this
hainx_266 liked this
Anh Van Nguyen liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->