![Phân tích tư tưởng của nhân dân qua đoạn thơ: Những người vợ nhớ chồng… Những cuộc đời đã hóa sông núi ta trong Đất nước của Nguyễn Khoa Điềm](https://timtailieu.net/upload/document/136415/phan-tich-tu-tuong-cua-nhan-dan-qua-doan-tho-039-039-nhung-nguoi-vo-nho-chong-nhung-cuoc-doi-da-hoa-song-nui-ta-039-039-trong-dat-nuoc-cua-nguyen-khoa-136415.jpg)
Kỹ thuật lập trình C/C++-Chương: Lập trình khái quát với hàm
Số trang: 19
Loại file: pdf
Dung lượng: 223.00 KB
Lượt xem: 9
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Đôi khi ta muốn viết một lầnnhưng có thể tạo ra các hàm với tham số thuộc nhiều kiểu khác nhau, thay vì phải viết chồng nhiều hàm tương tự nhau.Khuôn mẫu hàm (function template): là khái niệm giúp định nghĩa những hàm mà chưa xác định kiểu của các tham số.Có thể hiểu là viết gộp chung các hàm chồng giống nhau về mặt thuật toán.Kiểu của các tham số là tham số của khuôn mẫu
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình C/C++-Chương:Lập trình khái quát với hàm Lập trình khái quát với hàm (function templates) EE3490: Kỹ thuật lập trình – HK1 2011/20121 Đào Trung Kiên – ĐH Bách khoa Hà NộiKhái niệm Đôi khi ta muốn viết một lần nhưng có thể tạo ra các hàm với tham số thuộc nhiều kiểu khác nhau, thay vì phải viết chồng nhiều hàm tương tự nhau int max(int a, int b) { return a>b ? b:a; } double max(double a, double b) { return a>b ? b:a; } float max(float a, float b) { return a>b ? b:a; } lập trình ở mức độ khái quát cao hơn: coi kiểu của biến cũng là tham số (type parameterization) Khuôn mẫu hàm (function template): là khái niệm giúp định nghĩa những hàm mà chưa xác định kiểu của các tham số Có thể hiểu là viết gộp chung các hàm chồng giống nhau về mặt thuật toán Kiểu của các tham số là tham số của khuôn mẫu EE3490: Kỹ thuật lập trình – HK1 2011/2012 2 Đào Trung Kiên – ĐH Bách khoa Hà NộiĐịnh nghĩa hàm khái quát Ví dụ 1: template void swap(T& a, T& b) { T c = a; a = b; b = c; } T được giả định là kiểu của các tham số a, b và biến c T sẽ được xác định khi gọi hàm T là tham số của khuôn mẫu, trong khi a, b là tham số của hàm Ví dụ 2: template void push(Containter& s, Object o) {...} Có thể dùng từ khoá “typename” thay vì “class” template void swap(T& a, T& b) {...} EE3490: Kỹ thuật lập trình – HK1 2011/2012 3 Đào Trung Kiên – ĐH Bách khoa Hà NộiGọi hàm khái quát Gọi với kiểu tường minh: max(a, b); max(x, y); swap(s1, s2); swap(p1, p2); push(l, st); Gọi với kiểu ngầm định: int a, b; double x, y; b); // max(a, b); max(a, y); // max(x, y); max(x, x); // lỗi max(a, EE3490: Kỹ thuật lập trình – HK1 2011/2012 4 Đào Trung Kiên – ĐH Bách khoa Hà NộiChồng hàm khái quát Các khuôn mẫu hàm cũng có thể được định nghĩa chồng template T max(T a, T b) { ... } template T max(T a, T b, T c) { ... } template T max(T* arr, int n) { ... } Gọi hàm chồng max(10, 20); max(c, f); max(1.5, 2.1, 3.14); max(1un34k, 6); EE3490: Kỹ thuật lập trình – HK1 2011/2012 5 Đào Trung Kiên – ĐH Bách khoa Hà NộiCá biệt hoá hàm khái quát Có thể định nghĩa các phiên bản cho trường hợp riêng của một hàm khái quát template T max(T a, T b) { return a>b ? b:a; } template std::string max(std::string s1, std::string s2) { return s1.compare(s2) == 1 ? s1:s2; } Cá biệt hoá không hoàn toàn template void push(Containter& s, Object o) {...} template void push(Stack& s, Object o) { ... } EE3490: Kỹ thuật lập trình – HK1 2011/2012 6 Đào Trung Kiên – ĐH Bách khoa Hà NộiKhông chỉ khái quát hoá kiểu của tham số… Khái quát hoá kiểu trả về template Product makeProd(Worker& w) { w.work(); return w.getResult(); } Khái quát hoá kiểu của biến cục bộ template void forEach(const List& l) { Iterator i = l.first(); for (; i!=l.last(); i = i.next()) doSmth(i.get()); } EE3490: Kỹ thuật lập trình – HK1 2011/2012 7 Đào Trung Kiên – ĐH Bách khoa Hà NộiTham số của khuôn mẫu không chỉ là kiểu... Có thể là các giá trị sử dụng giá trị đó như hằng template Object* makeArray() { return new Object[N]; } string* p1 = makeArray(); Si ...
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình C/C++-Chương:Lập trình khái quát với hàm Lập trình khái quát với hàm (function templates) EE3490: Kỹ thuật lập trình – HK1 2011/20121 Đào Trung Kiên – ĐH Bách khoa Hà NộiKhái niệm Đôi khi ta muốn viết một lần nhưng có thể tạo ra các hàm với tham số thuộc nhiều kiểu khác nhau, thay vì phải viết chồng nhiều hàm tương tự nhau int max(int a, int b) { return a>b ? b:a; } double max(double a, double b) { return a>b ? b:a; } float max(float a, float b) { return a>b ? b:a; } lập trình ở mức độ khái quát cao hơn: coi kiểu của biến cũng là tham số (type parameterization) Khuôn mẫu hàm (function template): là khái niệm giúp định nghĩa những hàm mà chưa xác định kiểu của các tham số Có thể hiểu là viết gộp chung các hàm chồng giống nhau về mặt thuật toán Kiểu của các tham số là tham số của khuôn mẫu EE3490: Kỹ thuật lập trình – HK1 2011/2012 2 Đào Trung Kiên – ĐH Bách khoa Hà NộiĐịnh nghĩa hàm khái quát Ví dụ 1: template void swap(T& a, T& b) { T c = a; a = b; b = c; } T được giả định là kiểu của các tham số a, b và biến c T sẽ được xác định khi gọi hàm T là tham số của khuôn mẫu, trong khi a, b là tham số của hàm Ví dụ 2: template void push(Containter& s, Object o) {...} Có thể dùng từ khoá “typename” thay vì “class” template void swap(T& a, T& b) {...} EE3490: Kỹ thuật lập trình – HK1 2011/2012 3 Đào Trung Kiên – ĐH Bách khoa Hà NộiGọi hàm khái quát Gọi với kiểu tường minh: max(a, b); max(x, y); swap(s1, s2); swap(p1, p2); push(l, st); Gọi với kiểu ngầm định: int a, b; double x, y; b); // max(a, b); max(a, y); // max(x, y); max(x, x); // lỗi max(a, EE3490: Kỹ thuật lập trình – HK1 2011/2012 4 Đào Trung Kiên – ĐH Bách khoa Hà NộiChồng hàm khái quát Các khuôn mẫu hàm cũng có thể được định nghĩa chồng template T max(T a, T b) { ... } template T max(T a, T b, T c) { ... } template T max(T* arr, int n) { ... } Gọi hàm chồng max(10, 20); max(c, f); max(1.5, 2.1, 3.14); max(1un34k, 6); EE3490: Kỹ thuật lập trình – HK1 2011/2012 5 Đào Trung Kiên – ĐH Bách khoa Hà NộiCá biệt hoá hàm khái quát Có thể định nghĩa các phiên bản cho trường hợp riêng của một hàm khái quát template T max(T a, T b) { return a>b ? b:a; } template std::string max(std::string s1, std::string s2) { return s1.compare(s2) == 1 ? s1:s2; } Cá biệt hoá không hoàn toàn template void push(Containter& s, Object o) {...} template void push(Stack& s, Object o) { ... } EE3490: Kỹ thuật lập trình – HK1 2011/2012 6 Đào Trung Kiên – ĐH Bách khoa Hà NộiKhông chỉ khái quát hoá kiểu của tham số… Khái quát hoá kiểu trả về template Product makeProd(Worker& w) { w.work(); return w.getResult(); } Khái quát hoá kiểu của biến cục bộ template void forEach(const List& l) { Iterator i = l.first(); for (; i!=l.last(); i = i.next()) doSmth(i.get()); } EE3490: Kỹ thuật lập trình – HK1 2011/2012 7 Đào Trung Kiên – ĐH Bách khoa Hà NộiTham số của khuôn mẫu không chỉ là kiểu... Có thể là các giá trị sử dụng giá trị đó như hằng template Object* makeArray() { return new Object[N]; } string* p1 = makeArray(); Si ...
Tìm kiếm theo từ khóa liên quan:
kỹ thuật máy tính kỹ thuật lập trình giáo trình kỹ thuật lập trình C bài tập kỹ thuật lập trình C tài liệu kỹ thuật lập trình C chuyên ngành kỹ thuật lập trìnhTài liệu liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 274 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 216 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 203 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 174 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 156 0 0 -
142 trang 130 0 0
-
Giáo trình Kỹ thuật lập trình C: Căn bản & nâng cao - Phần 1
202 trang 128 0 0 -
Báo cáo thực tập Công nghệ thông tin: Lập trình game trên Unity
27 trang 122 0 0 -
Giáo trình môn xử lý tín hiệu số - Chương 5
12 trang 121 0 0 -
Giáo trình về phân tích thiết kế hệ thống thông tin
113 trang 114 0 0