Đang tải... (xem toàn văn)
Hàm tổng quát cho nhiều kiểu dữ liệu khác nhau.. Hàm tổng quát cho nhiều kiểu dữ liệu khác nhau.[r]
(1)Template,
Template,
Thư viện C++
(2)Nội dung
Nội dung
Function Template.Function Template. Class Template.Class Template.
(3)Nội dung
Nội dung
Function Template.Function Template. Class Template.Class Template.
(4)Function Template
Function Template
Xét hàm tìm số:Xét hàm tìm số:
int timMin(int a, int b)
int timMin(int a, int b)
{
{
return (a < b) ? a : b;
return (a < b) ? a : b;
}
}
float timMin(float a, float b)
float timMin(float a, float b)
{
{
return (a < b) ? a : b;
return (a < b) ? a : b;
}
}
PhanSo timMin(PhanSo a, PhanSo b)
PhanSo timMin(PhanSo a, PhanSo b)
{
{
return (a < b) ? a : b;
return (a < b) ? a : b;
}
}
Tìm min hai số thực?
Tìm min hai số thực?
Tìm min hai phân số?
Tìm min hai phân số?
Có cách đơn giản
hơn?
Có cách đơn giản
hơn? Dùng Function Template!!
(5)Function Template
Function Template
Hàm tìm dùng Function Template:Hàm tìm dùng Function Template:
template <class T>
template <class T>
T
T timMin( timMin(TT a, a, TT b) b) {
{
return (a < b) ? a : b;
return (a < b) ? a : b;
} } void main() void main() { {
int a = 5, b = 3;
int a = 5, b = 3;
int c =
int c = timMin(a, b);timMin(a, b);
float d =
float d = timMin(1.5, 2.3);timMin(1.5, 2.3);
PhanSo p1(1, 2);
PhanSo p1(1, 2);
PhanSo p2(1, 3);
(6)Function Template
Function Template
Đặc điểm Function Template:Đặc điểm Function Template:
Hàm tổng quát cho nhiều kiểu liệu khác nhau.Hàm tổng quát cho nhiều kiểu liệu khác nhau. Tham số hóa kiểu liệu.Tham số hóa kiểu liệu.
Kiểu cụ thể định gọi hàm.Kiểu cụ thể định gọi hàm.
Ghi chú:Ghi chú:
Từ khóa Từ khóa “class”“class” thay thay “typename”“typename”.. Phần khai báo cài đặt có khai báo template.Phần khai báo cài đặt có khai báo template. Phần cài đặt hàm phải nằm file:Phần cài đặt hàm phải nằm file:
(7)Nội dung
Nội dung
Function Template.Function Template. Class Template.Class Template. Thư viện C++.Thư viện C++.
(8)Class Template
Class Template
Xét lớp đối tượng Mang:Xét lớp đối tượng Mang:
class MangNguyen class MangNguyen { private:
{ private: int
int m_kichThuoc;m_kichThuoc;
int
int *m_duLieu;*m_duLieu; public:
public:
Mang(int kichThuoc); Mang(int kichThuoc);
int
int layPhanTu(int viTri); layPhanTu(int viTri); }; }; class MangPhanSo class MangPhanSo { private: { private: int
int m_kichThuoc;m_kichThuoc;
PhanSo
PhanSo *m_duLieu;*m_duLieu; public:
public:
Mang(int kichThuoc); Mang(int kichThuoc);
PhanSo
PhanSo layPhanTu(int viTri); layPhanTu(int viTri); }; }; Mảng phân số? Mảng phân số?
Có cách đơn giản
hơn?
Có cách đơn giản
hơn? Dùng Class Template!!
(9)Class Template
Class Template
Lớp Mang dùng Class Template:Lớp Mang dùng Class Template:
template <class T>
template <class T> class Mang class Mang { { private: private: int
int m_kichThuoc;m_kichThuoc;
T
T *m_duLieu;*m_duLieu; public:
public:
Mang(int kichThuoc);
Mang(int kichThuoc);
T
T layPhanTu(int viTri); layPhanTu(int viTri);
}; }; void main() void main() { { Mang<int>
Mang<int> m1(10); m1(10); int a = m1.layPhanTu(5);
int a = m1.layPhanTu(5);
Mang<PhanSo>
Mang<PhanSo> m2(5); m2(5);
PhanSo p = m2.layPhanTu(2);
PhanSo p = m2.layPhanTu(2);
}
(10)Class Template
Class Template
Đặc điểm Class Template:Đặc điểm Class Template:
Lớp tổng quát cho nhiều kiểu liệu khác nhau.Lớp tổng quát cho nhiều kiểu liệu khác nhau. Tham số hóa kiểu liệu.Tham số hóa kiểu liệu.
Kiểu cụ thể truyền vào tạo đối tượng.Kiểu cụ thể truyền vào tạo đối tượng.
Ghi chú:Ghi chú:
Từ khóa Từ khóa “class”“class” thay thay “typename”“typename”.. Phần cài đặt lớp phải nằm file:Phần cài đặt lớp phải nằm file:
Phần khai báo lớp.Phần khai báo lớp
Phần tạo sử dụng đối tượng lớp.Phần tạo sử dụng đối tượng lớp
(11)Nội dung
Nội dung
Function Template.Function Template. Class Template.Class Template.
(12)Thư viện C++
Thư viện C++
Khái niệm thư viện:Khái niệm thư viện:
Tập hợp lớp, hàm có sẵn giúp giải công Tập hợp lớp, hàm có sẵn giúp giải cơng việc thường gặp.
việc thường gặp.
Bộ công cụng hữu ích lập trình viên.Bộ cơng cụng hữu ích lập trình viên. Một vài thư viện C++:Một vài thư viện C++:
Thư viện chuẩn (C++ Standard Library).Thư viện chuẩn (C++ Standard Library) Thư viện boost.Thư viện boost
(13)Thư viện C++
Thư viện C++ Thư viện chuẩn:Thư viện chuẩn:
Thư viện C++.Thư viện C++.
Các lớp hàm nằm namespace std.Các lớp hàm nằm namespace std. File Header không h.File Header không h.
Phân nhóm:Phân nhóm:
Nhóm nhập xuất: iostream, iomanip, fstream, …Nhóm nhập xuất: iostream, iomanip, fstream, … Nhóm STL.Nhóm STL.
……
(14)Thư viện C++
Thư viện C++
Thư viện STL (Thư viện STL (SStandard tandard TTemplate emplate LLibrary):ibrary):
Một phần thư viện chuẩn.Một phần thư viện chuẩn.
Các lớp hàm hỗ trợ lập trình với template.Các lớp hàm hỗ trợ lập trình với template. Phân nhóm:Phân nhóm:
Nhóm container: vector, list, deque, set, …Nhóm container: vector, list, deque, set, … Nhóm string: string, …Nhóm string: string, …
(15)Thư viện C++
Thư viện C++ Lớp string:Lớp string:
File header <string>.File header <string>.
Lớp đại diện cho đối tượng chuỗi.Lớp đại diện cho đối tượng chuỗi. Giải vấn đề trỏ.Giải vấn đề trỏ.
Các phương thức chính:Các phương thức chính:
string(char *): khởi tạo từ chuỗi ký tự.string(char *): khởi tạo từ chuỗi ký tự length(): lấy chiều dài chuỗi.length(): lấy chiều dài chuỗi
Toán tử [ ]: lấy ký tự vị trí đó.Tốn tử [ ]: lấy ký tự vị trí
(16)Thư viện C++
Thư viện C++ Ví dụ lớp string:Ví dụ lớp string:
void main()
void main()
{
{
string
string s1(“software”);s1(“software”); string
string s2(“SoftWare”);s2(“SoftWare”); if (s1 == s2)
if (s1 == s2)
cout << “equal.” << endl;
cout << “equal.” << endl;
else
else
cout << “not equal.” << endl;
cout << “not equal.” << endl;
s2 = s1.substr(4, 4);
s2 = s1.substr(4, 4);
cout << s2;
cout << s2;
string
string s3 = s1 + s2;s3 = s1 + s2; cout << s3 << endl;
cout << s3 << endl;
}
(17)Thư viện C++
Thư viện C++ Lớp vector:Lớp vector:
File header <vector>.File header <vector>. Lớp mảng kiểu T.Lớp mảng kiểu T.
Giải vấn đề trỏ.Giải vấn đề trỏ. Các phương thức chính:Các phương thức chính:
vector<T>(): khởi tạo mảng kiểu T.vector<T>(): khởi tạo mảng kiểu T size(): lấy kích thước mảng.size(): lấy kích thước mảng
(18)Thư viện C++
Thư viện C++ Ví dụ:Ví dụ:
void main()
void main()
{
{
vector<int>
vector<int> v1;v1; v1.push_back(1);
v1.push_back(1);
v1.push_back(2);
v1.push_back(2);
for (int i = 0; i < v1.size(); i++)
for (int i = 0; i < v1.size(); i++)
cout << v1[i] << “ “;
cout << v1[i] << “ “;
vector<PhanSo *> v2;
vector<PhanSo *> v2;
v2.push_back(new PhanSo(2, 6));
v2.push_back(new PhanSo(2, 6));
v2[0]->rutGon();
v2[0]->rutGon();
}
(19)Tóm tắt
Tóm tắt
Template:Template:
Cách thức tham số hóa kiểu liệu.Cách thức tham số hóa kiểu liệu.
Cho phép lập trình kiểu liệu tổng quát.Cho phép lập trình kiểu liệu tổng quát. Function template:Function template:
Hàm tổng quát cho nhiều kiểu liệu khác nhau.Hàm tổng quát cho nhiều kiểu liệu khác Kiểu cụ thể định gọi hàm.Kiểu cụ thể định gọi hàm
Class template:Class template:
Lớp tổng quát cho nhiều kiểu liệu khác nhau.Lớp tổng quát cho nhiều kiểu liệu khác
(20)Tóm tắt
Tóm tắt
Thư viện C++:Thư viện C++:
Bộ công cụ hỗ trợ lập trình.Bộ cơng cụ hỗ trợ lập trình. Thư viện chuẩn:Thư viện chuẩn:
Thư viện STL.Thư viện STL
(21)Nội dung
Nội dung Template.Template.
(22)Bài tập
Bài tập
Bài tập 6.1:Bài tập 6.1:
Liệt kê lớp cho biết tính lớp thư viện:
Liệt kê lớp cho biết tính lớp thư viện:
(23)Bài tập
Bài tập
Bài tập 6.2:Bài tập 6.2:
Xây dựng lớp
Xây dựng lớp mảngmảng kiểu liệu kiểu liệu
(Gợi ý) (Gợi ý)
Dùng class template khai báo lớp mảng.Dùng class template khai báo lớp mảng Dữ liệu mảng kiểu T.Dữ liệu mảng kiểu T
(24)Bài tập
Bài tập
Bài tập 6.3:Bài tập 6.3:
Xây dựng lớp
Xây dựng lớp con trỏ an toàncon trỏ an toàn cho kiểu liệu: cho kiểu liệu:
(Nhóm tạo hủy) (Nhóm tạo hủy)
Khởi tạo mặc định trỏ NULL.Khởi tạo mặc định trỏ NULL
Khởi tạo với kích thước nhớ cấp phát cho trước.Khởi tạo với kích thước nhớ cấp phát cho trước Khởi tạo từ đối tượng trỏ khác.Khởi tạo từ đối tượng trỏ khác
Hủy trỏ, thu hồi nhớ.Hủy trỏ, thu hồi nhớ
(Nhóm tốn tử) (Nhóm tốn tử)
Tốn tử số học: +, -, =.Toán tử số học: +, -, = Tốn tử ngơi: ++, .Tốn tử ngơi: ++, Tốn tử trỏ: *, &, [ ].Toán tử trỏ: *, &, [ ] Toán tử ép kiểu: (int).Toán tử ép kiểu: (int)