Danh mục

Kỹ thuật lập trình - Chương 9: Khuôn mẫu hàm và lớp

Số trang: 23      Loại file: pdf      Dung lượng: 226.75 KB      Lượt xem: 17      Lượt tải: 0    
Jamona

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tham khảo tài liệu kỹ thuật lập trình - chương 9: khuôn mẫu hàm và lớp, công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
Kỹ thuật lập trình - Chương 9: Khuôn mẫu hàm và lớpKỹ thuật lập trìnhPhần III: Lập trình tổng quátChương 9: 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start()Khuôn mẫu hàm và khuôn mẫu lớp 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010+ B*u; y = A*x 1010011000110010010010 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 1010011000110010010010 stop() 1100101100100010000010 1100101100100010000010 12/25/2007Nội dung chương 9 9.1 Khuôn mẫu hàm - Vai trò của khuôn mẫu hàm - Định nghĩa khuôn mẫu hàm - Sử dụng khuôn mẫu hàm 9.2 Khuôn mẫu lớp - Định nghĩa khuôn mẫu lớp - Dẫn xuất khuôn mẫu lớp - Ví dụ khuôn mẫu lớp Vector 2Chương 9: Khuôn mẫu hàm và khuôn mẫu lớp9.1 Khuôn mẫu hàm (function template) Vấn ₫ề: Nhiều hàm chỉ khác nhau về kiểu dữ liệu tham số áp dụng, không khác nhau về thuật toán Ví dụ: int max(int a, int b) { return (a > b)? a : b; } double max(double a, double b) { return (a > b)? a : b; } ... Các ví dụ khác: các hàm swap, sort, find, select,... Bản chất của vấn ₫ề? Nằm ở ngôn ngữ lập trình còn thấp, chưa gần với tư duy của con người! Giải pháp: Tổng quát hóa các hàm chỉ khác nhau về kiểu dữ liệu áp dụng thành khuôn mẫu hàm. 3Chương 9: Khuôn mẫu hàm và khuôn mẫu lớpĐịnh nghĩa khuôn mẫu hàm Ví dụ tổng quát hóa hàm max ₫ể có thể áp dụng cho nhiều kiểu dữ liệu khác nhau: template T max(T a, T b) { return (a > b)? a : b; } Ví dụ tổng quát hóa hàm swap: template Sử dụng từ khóa typename void (X& a, X& b) { hoặc class ₫ể khai báo tham X temp = a; số khuôn mẫu a = b; b = temp; } Một khuôn mẫu hàm inline: template inline T max(T a, T b) { return (a > b)? a : b;} 4Chương 9: Khuôn mẫu hàm và khuôn mẫu lớpKhai báo và sử dụng khuôn mẫu hàm Ví dụ sử dụng khuôn mẫu hàm max Khuôn mẫu hàm template T max(T a, T b); template void swap(T&, T&); void main() { Hàm khuôn mẫu int N1 = 5, N2 = 7; double D1 = 5.0, D2 = 7.0; int N = max(N1,N2); // max(int,int) char c = max(c,a); // max(char, char) double D = max(D1,D2); // max(double, double) swap(N1,N2); // swap(int&,int&) swap(D1,D2); // swap(double&,double&) D = max(D1,A1); // error: ambiguous N = max(c,A1); // error: ambiguous D = max(D1,A1);// OK: explicit qualification N = max(c,A); // OK: explicit qualification } 5Chương 9: Khuôn mẫu hàm và khuôn mẫu lớpKhả năng áp dụng khuôn mẫu hàm Khả năng áp dụng một khuôn mẫu hàm là vô tận, nhưng không phải áp dụng ₫ược cho tất cả các ₫ối số khuôn mẫu Ví dụ: Điều kiện ràng buộc ₫ối với kiểu dữ liệu có thể áp dụng trong khuôn mẫu hàm max là phải có phép so sánh lớn hơn (>): template inline T max(T a, T b) { return (a > b)? a : b;} => Đối với các kiểu dữ liệu mới, muốn áp dụng ₫ược thì cần phải nạp chồng toán tử so sánh > Tuy nhiên, khả năng áp dụng ₫ược chưa chắc ₫ã có ý nghĩa Ví dụ: Xác ₫ịnh chuỗi ký tự ₫ứng sau trong hai chuỗi cho trước theo vần ABC char city1[] = Ha Noi, city2[] = Hai Phong; char* city = max(city1,city2); // ??? // max(char*,char*) 6Chương 9: Khuôn mẫu hàm và khuôn mẫu lớpNạp chồng khuôn mẫu hàm Một khuôn mẫu hàm có thể ₫ư ...

Tài liệu được xem nhiều: