Xem mẫu

Chapter 11: Lập trình khái quát
(Generic programming)

1

EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội

Khuôn mẫu hàm
(Function templates)

2

EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội

General
Đô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 ? a:b; }
double max(double a, double b) { return a>b ? a:b; }
float max(float a, float b)
{ return a>b ? a:b; }

 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ố





3

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 2017/2018
TS. Đà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á “class” thay vì “typename”





4

template
void swap(T& a, T& b) {...}
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội

Gọ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:





5

int a,
double
max(a,
max(x,
max(a,

b;
x, y;
b); //  max(a, b);
y); //  max(x, y);
x); //  lỗi
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội

nguon tai.lieu . vn