Trang 1
goupee.vn goupee.com Phần 2: Ngôn ngữ lập trình C++ Chương 6: Mẫu (template) cuu duong than cong . com fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn goupee.com Phần 2: Ngôn ngữ lập trình C++ Chương 6: Mẫu (template) cuu duong than cong . com fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnCác nội dung chính goupee.com 1. Giới thiệu 2. Mẫu hàm 3. Mẫu lớp cuu duong than cong . com fb.com/goupee.vn 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn1. Giới thiệu goupee.com 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<T>, 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<int> Nó có thể dùng để thay thế cho việc định nghĩa chồng hàmcuu duong than cong . com Trong C++, các thành phần mà ta có thể tạo Mẫu là Hàm và Lớp fb.com/goupee.vn 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn2. Mẫu hàm goupee.com Khái niệm mẫu hàm Tạo mẫu hàm Sử dụng mẫu hàm cuu duong than cong . com fb.com/goupee.vn 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnKhái niệm mẫu hàm goupee.com 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 <class T> int i, j; char a,b; void swap (T &x, T &y){ float x, y; T z = x; cuu duong than cong . comswap(i, j); x = y; swap(a, b); y= z; swap(x, y); } fb.com/goupee.vn 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnTạo một mẫu hàm goupee.com Cú pháp Khai báo Một mẫu hàm có tên mẫu thể sử dụng một template <class T> hoặc nhiều tên void swap1(T &x, T &y){ T z = x; mẫu x = y; y= z; } cuu duong than cong . comTên mẫu sẽ được sử dụng trongphần đầu và/hoặc trong thân hàm fb.com/goupee.vn 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnTạo một mẫu hàm goupee.com Mẫu hàm có hai tên mẫu template <class T, class U> void swap2 (T &x, U &y){ T z = x; x = (T) y; y= (U) z; } cuu duong than cong . com fb.com/goupee.vn 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnSử dụng mẫu hàm goupee.com 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. cuu duong than cong . com fb.com/goupee.vn 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnVí dụ áp dụng mẫu hàm goupee.com 9. int main(int argc, char* argv[]) { 1. #include <iostream> 10. int i=20,j=30; 2. using namespace std; 11. char c1='A',c2='B'; 12. float x=20.15, y=35.5; 3. //Định nghĩa mẫu hàm 13. //Gọi mẫu hàm 4. template <class T> 14. swap1(i,j); 5. void swap1(T &a,T &b) { 15. swap1(c1,c2); 6. T c; 16. swap1(x,y); 7. c=a; a=b; b=c; 17. cout<<"i="<<i<<" j="<<j<<endl; 8. } 18. cout<<"c1="<<c1<<" c2="<<c2<<endl; cuu duong than cong . com19. cout<<"x="<<x<<" y="<<y<<endl; 20. return 0; 21. } fb.com/goupee.vn 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnVí dụ áp dụng mẫu hàm goupee.com Kết quả chạy chương trình trên Output i=30 j=20 c1=B c2=A x=35.5 y=20.15 cuu duong than cong . com fb.com/goupee.vn 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnMẫu hàm và sự chồng hàm goupee.com 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. cuu duong than cong . com fb.com/goupee.vn 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn goupee.com 1. #include <string.h> 2. #include <iostream> 3. using namespace std; 15. int main(int argc, char **argv) 16. { 4. //Định nghĩa mẫu hàm 17. int i=10,j=20; 5. template <class T> 18. swap1(i,j); 6. void swap1(T &a,T &b) { 19. cout<<"i="<<i<<"; j="<<j<<endl; 7. T c; 20. char name1[]="Gone With The Wind"; 8. c=a; a=b; b=c; 21. char name2[]="Mission Impossible"; 9. } 9. void swap1(char a[], char 22. swap1(name1,name2); 23. cout<<"Name 1:"<<name1<<endl; b[]){ 24. cout<<"Name 2:"<<name2; 10. char st[1000]; 25. return 0; 11.12. strcpy(st,a);strcpy(a,b); cuu duong than cong . com26. } 13. strcpy(b,st); 14. } fb.com/goupee.vn 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnKết quả chạy chương trình goupee.com Output i=20; j=10 Name 1: Mission Impossible Name 2: Gone With The Wind cuu duong than cong . com fb.com/goupee.vn 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn3. Mẫu lớp goupee.com Khái niệm mẫu lớp Tạo mẫu lớp Sử dụng mẫu lớp cuu duong than cong . com fb.com/goupee.vn 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnKhái niệm mẫu lớp goupee.com 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 <class T> class Stack { typedef Stack<int> IntStack; Stack() ; typedef Stack<float> FloatStack; ~Stack() ; typedef Stack<string> StringStack; int push(const T& x);cuu duong than cong . com int pop(T& x) ; IntStack s1; int isEmpty() const; FloatStack s2; int isFull() const; }; fb.com/goupee.vn 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnTạo mẫu lớp goupee.com Cú pháp: Khai báo tên mẫu template <class T> class Stack { Stack() ; ~Stack() ; int push(const T&); int pop(T&) ; T* top; }; cuu duong than cong . com 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 fb.com/goupee.vn 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnSử dụng mẫu lớp goupee.com 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.cuu duong than cong . com 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) fb.com/goupee.vn 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vn2 cách sử dụng mẫu lớp goupee.com typedef Stack<int> IntStack; Cách 1: typedef Stack<float> FloatStack; tường minh IntStack s1; FloatStack s2; Cách 2: Stack<int> s1; ngầm định Stack<float> s2; cuu duong than cong . com fb.com/goupee.vn 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnVí dụ áp dụng: xây dựng mẫu lớp Stack, tệpgoupee.com Stack.h //stack.h 1. #pragma once 2. template <class T> 3. class Stack 4. { 5. public: 6. Stack(unsigned int msize=10) ; 7. ~Stack() { delete [] top ; } 8. int push(const T&); 9. T pop() ; // pop an element off the stack 10. int isEmpty()const { return size == 0 ; } 11. int isFull() const { return size == maxsize ; } 12. private: 13. int size ; // Number of elements on Stackcuu duong than cong . com 14. int maxsize; 15. T* top ; 16. } ; fb.com/goupee.vn 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt
goupee.vnTệp Stack.h goupee.com //stack.h (tiếp) 17. //constructor with the default size 10 18. template <class T> 19. Stack<T>::Stack(unsigned int msize) 20. { 21. size = 0; 22. maxsize=msize; 23. top = msize>0?(new T[msize]):NULL; 24. } cuu duong than cong . com fb.com/goupee.vn 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
Hiển thị 20 trang đầu. Tải tài liệu để xem đầy đủ.
Chưa có bình luận nào. Hãy là người đầu tiên!
Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!