Lập trình khái qt với hàm
(function templates)
1EE3490: Kỹ thuật lập trình – HK1 2011/2012
Đào Trung Kiên ĐH Bách khoa Nội
Ki 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 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ố
thể hiểu là viết gộp chung các hàm chồng giống nhau vmặt
thuật toán
Kiểu của các tham số là tham số của khuôn mẫu
2EE3490: Kỹ thuật lập trình – HK1 2011/2012
Đào Trung Kiên ĐH Bách khoa Nội
Định nghĩa hàm khái quát
dụ 1:
template <class T>
void swap(T& a, T& b) {
Tc = 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
dụ 2:
template <class Containter, class Object>
void push(Containter& s, Object o) {...}
thể dùng từ khoá “typename” thay “class
template <typename T>
void swap(T& a, T& b) {...}
3EE3490: Kỹ thuật lập trình – HK1 2011/2012
Đào Trung Kiên ĐH Bách khoa Nội
Gọi hàm khái quát
Gọi với kiểu tường minh:
max<int>(a, b);
max<double>(x, y);
swap<String&>(s1, s2);
swap<Worker*&>(p1, p2);
push<List&, Student>(l, st);
Gọi với kiểu ngầm định:
int a, b;
double x, y;
max(a, b); // max<int>(a, b);
max(x, y); // max<double>(x, y);
max(a, x); // lỗi
4EE3490: Kỹ thuật lập trình – HK1 2011/2012
Đào Trung Kiên ĐH Bách khoa Nội
Chồng hàm khái qt
Các khuôn mẫu hàm cũng có thể được định nghĩa
chồng
template <class T> T max(T a, T b) { ... }
template <class T> T max(T a, T b, T c) { ... }
template <class T> T max(T* arr, int n) { ... }
Gọi hàm chồng
max<int>(10, 20);
max('c', 'f');
max<double>(1.5, 2.1, 3.14);
max("1un34k", 6);
5EE3490: Kỹ thuật lập trình – HK1 2011/2012
Đào Trung Kiên ĐH Bách khoa Nội