Kthut lp trình
Phn III: Lp trình tng quát
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
0101010101010101100001
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
1010011000110010010010
1100101100100010000010
1100101100100010000010
1100101100100010000010
y = A*x + B*u;
x = C*x + d*u;
StateController
start()
stop()
LQGController
start()
stop()
Chương 9:
Khuôn mu hàm khuôn mulp
12/25/2007
2
Chương 9: Khuôn mu hàm khuôn mulp
Nidung chương 9
9.1 Khuôn muhàm
-Vaitròca khuôn muhàm
-Định nghĩa khuôn muhàm
-Sdng khuôn muhàm
9.2 Khuôn mulp
-Định nghĩa khuôn mulp
-Dnxut khuôn mulp
-Vídkhuôn mulp Vector
3
Chương 9: Khuôn mu hàm khuôn mulp
9.1 Khuôn muhàm(function template)
Vn ₫ề: Nhiu hàm chkhác nhau vkiu dliu tham sáp
dng, không khác nhau vthut toán
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í dkhác: các hàm swap, sort, find, select,...
Bn cht ca vn ₫ề? Nm ngôn nglp trình còn thp, chưa
gn vi tư duy ca con người!
Gii pháp: Tng quát hóa các hàm chkhác nhau vkiu d
liu áp dng thành khuôn mu hàm.
4
Chương 9: Khuôn mu hàm khuôn mulp
Định nghĩakhuônmuhàm
dtng quát hóa hàm max ₫ể tháp dng cho nhiukiu
dliu khác nhau:
template <typename T>
T max(T a, T b) {
return (a > b)? a : b;
}
dtng quát hóa hàm swap:
template <class X>
void (X& a, X& b) {
X temp = a;
a = b;
b = temp;
}
Mtkhuônmuhàminline:
template <typename T>
inline T max(T a, T b) { return (a > b)? a : b;}
Sdng tkhóa typename
hocclass ₫ể khai báo tham
skhuôn mu
5
Chương 9: Khuôn mu hàm khuôn mulp
Khai báo sdng khuôn muhàm
dsdng khuôn muhàmmax
template <class T> T max(T a, T b);
template <class T> void swap(T&, T&);
void main() {
int N1 = 5, N2 = 7;
double D1 = 5.0, D2 = 7.0;
int N = max(N1,N2); // max<int>(int,int)
char c = max('c','a'); // max<char>(char, char)
double D = max(D1,D2); // max<double>(double, double)
swap(N1,N2); // swap<int>(int&,int&)
swap(D1,D2); // swap<double>(double&,double&)
D = max(D1,A1); // error: ambiguous
N = max('c',A1); // error: ambiguous
D = max<double>(D1,A1);// OK: explicit qualification
N = max<int>('c',A); // OK: explicit qualification
}
Khuôn muhàm
Hàm khuôn mu