Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 6: Mẫu (template)
lượt xem 4
download
Nối tiếp nội dung của chương 5 "Bài giảng Ngôn ngữ lập trình C và C++", chương 6 trình bày các nội dung: Khái niệm về mẫu hàm, mẫu hàm, mẫu lớp, tạo mẫu hàm. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 6: Mẫu (template)
- Phần 2: Ngôn ngữ lập trình C++ Chương 6: Mẫu (template)
- Các nội dung chính 1. Giới thiệu 2. Mẫu hàm 3. Mẫu lớp 2
- 1. Giới thiệu Khái niệm Mẫu (template): Là một kỹ thuật cho phép một thành phần chỉ cần được định nghĩa một lần hoặc một số ít lần, nhưng có thể được sử dụng lại nhiều lần cho nhiều đối tượng khác Là kỹ thuật cho phép tham số hóa kiểu dữ liệu; như cho phép định nghĩa cấu trúc Stack, với T là tham số kiểu, đại diện cho kiểu DL của các phần tử của Stack. Sau đó T có thể được thay thế bằng một kiểu DL cụ thể, ví dụ int, và C++ sẽ tự động tạo ra code để định nghĩa Stack Nó có thể dùng để thay thế cho việc định nghĩa chồng hàm Trong C++, các thành phần mà ta có thể tạo Mẫu là Hàm và Lớp 3
- 2. Mẫu hàm Khái niệm mẫu hàm Tạo mẫu hàm Sử dụng mẫu hàm 4
- Khái niệm mẫu hàm Là hàm mà khi định nghĩa có sử dụng một hoặc nhiều mẫu Mẫu hàm được dùng để cho phép định nghĩa hàm một lần, nhưng có thể được gọi nhiều lần với tham số là các kiểu dữ liệu khác nhau template template int int i,i,j;j;char char a,b; a,b; void void swap swap(T (T&x, &x,TT&y){ &y){ float float x,x,y;y; TT zz==x;x; swap(i, swap(i,j); j); xx==y;y; swap(a, swap(a,b); b); y= y=z;z; swap(x, swap(x,y); y); }} 5
- Tạo một mẫu hàm Cú pháp Khai báo tên mẫu Một mẫu hàm có thể sử dụng một template template void void swap1(T swap1(T&x,&x,TT&y){ &y){ hoặc nhiều tên TT zz==x;x; mẫu xx==y;y; y= y=z;z; }} Tên mẫu sẽ được sử dụng trongphần đầu và/hoặc trong thân hàm 6
- Tạo một mẫu hàm Mẫu hàm có hai tên mẫu template template void void swap2 swap2(T (T&x, &x,UU&y){ &y){ TT zz==x;x; xx==(T) (T)y;y; y= y=(U) (U)z;z; }} 7
- Sử dụng mẫu hàm Việc gọi mẫu hàm cũng giống như gọi hàm thông thường. Hàm được gọi này, khi đó được gọi là hàm thể hiện Khi gọi hàm mẫu, thì tùy theo kiểu dữ liệu của hàm thể hiện, mà chương trình dịch sẽ tự động tạo ra định nghĩa phù hợp cho hàm này. 8
- Ví dụ áp dụng mẫu hàm 9. 9. int intmain(int main(intargc, argc,char* char*argv[]) argv[]){{ 1. 1. #include #include 10. 10. int inti=20,j=30; i=20,j=30; 2. 2. using usingnamespace namespacestd; std; 11. 11. char charc1='A',c2='B'; c1='A',c2='B'; 12. 12. float floatx=20.15, x=20.15,y=35.5; y=35.5; 3. 3. //Định //Địnhnghĩa nghĩamẫu mẫuhàm hàm 13. 13. //Gọi //Gọimẫu mẫuhàm hàm 4. 4. template template 14. 14. swap1(i,j); swap1(i,j); 5. 5. void voidswap1(T swap1(T&a,T &a,T&b) &b){{ 15. 15. swap1(c1,c2); swap1(c1,c2); 6. 6. TTc; c; 16. 16. swap1(x,y); swap1(x,y); 7. 7. c=a; c=a;a=b; a=b;b=c; b=c; 17. 17. cout
- Ví dụ áp dụng mẫu hàm Kết quả chạy chương trình trên Output i=30 i=30 j=20 j=20 c1=B c1=B c2=A c2=A x=35.5 x=35.5 y=20.15 y=20.15 10
- Mẫu hàm và sự chồng hàm Mẫu hàm là một công cụ hỗ trợ cho việc chồng hàm, chứ không hoàn toàn thay thế được cho chồng hàm Ví dụ hàm swap1 ở trên không thực hiện được việc hoán đổi 2 chuỗi ký tự, khi đó ta phải chồng hàm này. 11
- 1. 1. #include #include 2. 2. #include #include 3. 3. using usingnamespace namespacestd; std; 15. 15.int intmain(int main(intargc, argc,char char**argv) **argv) 16. 16.{{ 4. 4. //Định //Địnhnghĩa nghĩamẫu mẫuhàm hàm 17. 17. intinti=10,j=20; i=10,j=20; 5. 5. template template 18. 18. swap1(i,j); swap1(i,j); 6. 6. void voidswap1(T swap1(T&a,T &a,T&b) &b){{ 19. 19. cout
- Kết quả chạy chương trình Output i=20; i=20; j=10 j=10 Name Name 1: 1: Mission Mission Impossible Impossible Name Name 2: 2: Gone Gone With With The The Wind Wind 13
- 3. Mẫu lớp Khái niệm mẫu lớp Tạo mẫu lớp Sử dụng mẫu lớp 14
- Khái niệm mẫu lớp Là lớp mà khi định nghĩa có sử dụng một hoặc nhiều mẫu Mẫu lớp được dùng để cho phép định nghĩa lớp một lần, nhưng có thể tạo ra nhiều lớp khác nhau với tham số là các kiểu dữ liệu khác nhau template template class class StackStack{{ typedef typedef Stack StackIntStack; IntStack; Stack() Stack(); ; typedef typedef Stack StackFloatStack; FloatStack; ~Stack() ~Stack(); ; typedef typedef Stack StackStringStack; StringStack; int intpush(const push(constT& T&x); x); int intpop(T& pop(T&x) x); ; IntStack IntStack s1; s1; int intisEmpty() isEmpty()const; const; FloatStack FloatStacks2; s2; int intisFull() isFull()const; const; };}; 15
- Tạo mẫu lớp Cú pháp: Khai báo tên mẫu template template class class Stack Stack{{ Stack() Stack(); ; ~Stack() ~Stack(); ; int intpush(const push(constT&); T&); int intpop(T&) pop(T&); ; T* T*top; top; };}; Tên mẫu sẽ được sử dụng trong thân lớp cho các thành phần dữ liệu và các hàm thành viên 16
- Sử dụng mẫu lớp Lớp thể hiện: là lớp được tạo ra từ mẫu lớp với các mẫu được thay thế bằng các kiểu dữ liệu cụ thể Có 2 cách để tạo ra lớp thể hiện: Cách 1: định nghĩa tường minh một lớp thể hiện cho một kiểu dữ liệu cụ thể từ mẫu lớp (với từ khóa typedef), rồi sau đó khai báo các đối tượng thuộc lớp thể hiện này. Cách 2: Khai báo luôn các đối tượng thuộc lớp thể hiện ngầm định (không tường minh) 17
- 2 cách sử dụng mẫu lớp typedef typedef Stack StackIntStack; IntStack; Cách 1: typedef typedef Stack StackFloatStack; FloatStack; tường minh IntStack IntStack s1; s1; FloatStack FloatStacks2; s2; Cách 2: Stack Stack s1; s1; ngầm định Stack Stack s2; s2; 18
- Ví dụ áp dụng: xây dựng mẫu lớp Stack, tệp Stack.h //stack.h //stack.h 1.1. #pragma #pragmaonceonce 2.2. template template 3.3. class classStack Stack 4.4. {{ 5.5. public: public: 6.6. Stack(unsigned Stack(unsignedint intmsize=10) msize=10);; 7.7. ~Stack() ~Stack(){{delete delete[][]top top;;}} 8.8. int intpush(const push(constT&); T&); 9.9. TTpop() pop();; ////pop popan anelement elementoffoffthe thestack stack 10. 10. int intisEmpty()const isEmpty()const{{return returnsize size====00;;}} 11. 11. int intisFull() isFull()const const{{return returnsize size== ==maxsize maxsize;;}} 12. 12.private: private: 13. 13. int intsize size;; ////Number Numberof ofelements elementson onStack Stack 14. 14. int intmaxsize; maxsize; 15. 15. T* T*top top;; 16. 16.}};; 19
- Tệp Stack.h //stack.h //stack.h(tiếp) (tiếp) 17.//constructor 17.//constructorwith withthe thedefault defaultsize size10 10 18.template 18.template 19.Stack::Stack(unsigned 19.Stack::Stack(unsignedint intmsize) msize) 20.{ 20.{ 21. 21. size size==0; 0; 22. 22. maxsize=msize; maxsize=msize; 23. 23. top top==msize>0?(new msize>0?(newT[msize]):NULL; T[msize]):NULL; 24.} 24.} 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ngôn ngữ lập trình Java căn bản
115 p | 351 | 104
-
Bài giảng Ngôn ngữ lập trình C++: Chương 1 - Trần Minh Châu
17 p | 250 | 54
-
Bài giảng Ngôn ngữ lập trình C# - Nguyễn Hồng Phương
409 p | 214 | 41
-
Bài giảng Ngôn ngữ lập trình ứng dụng: Phần 1 – ĐH CNTT&TT
45 p | 113 | 13
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 1: Ngôn ngữ lập trình C) - Chương 1: Ôn tập một số nội dung chính của NNLT C
31 p | 157 | 13
-
Bài giảng Ngôn ngữ lập trình bậc cao - Th.S Đoàn Thị Thu Huyền
44 p | 150 | 10
-
Bài giảng Ngôn ngữ lập trình C: Chương 1 - TS. Nguyễn Thị Hiền
12 p | 62 | 9
-
Bài giảng Ngôn ngữ lập trình - Nguyễn Văn Linh
109 p | 118 | 8
-
Bài giảng Ngôn ngữ lập trình C - Chương 1: Giới thiệu ngôn ngữ C
4 p | 104 | 8
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 1 - TS. Đỗ Đăng Khoa
53 p | 112 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 5: Các lớp nhập/xuất trong C++
19 p | 132 | 7
-
Bài giảng Ngôn ngữ lập trình C: Chương 1 - PhD. Nguyễn Thị Huyền
12 p | 55 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ C++) - Chương 2: Giới thiệu về ngôn ngữ lập trình C++
49 p | 137 | 7
-
Bài giảng Ngôn ngữ lập trình C và C++: Bài 4 - TS. Đỗ Đăng Khoa
40 p | 95 | 5
-
Bài giảng Ngôn ngữ lập trình C/C++ (Bài giảng tuần 1) – Nguyễn Hải Châu
7 p | 142 | 5
-
Bài giảng Ngôn ngữ lập trình C và C++ (Phần 2: Ngôn ngữ lập trình C++) - Chương 3: Lớp và đối tượng
52 p | 112 | 5
-
Bài giảng Ngôn ngữ lập trình: Bài 1 - Lý Anh Tuấn
30 p | 82 | 4
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn