Bài giảng Ngôn ngữ lập trình Bài 7 Khuôn mẫu (Template) và .Thư viện chuẩn (STL) cung cấp cho người học các kiến thức Nhắc lại về vector, Cstring và lớp String, khuôn mẫu hàm, khuôn mẫu lớp. Mời các bạn cùng tham khảo.
NGÔN NGỮ LẬP TRÌNH Bài 7: Khuôn mẫu (Template) Thư viện chuẩn (STL) Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT Trường Đại Học Thủy Lợi NỘI DUNG Nhắc lại vector C-string lớp String Khuôn mẫu hàm Khuôn mẫu lớp Bài giảng có sử dụng hình vẽ sách “Practical Debugging in C++, A Ford and T Teorey, Prentice Hall, 2002” NHẮC LẠI VỀ VECTOR MỘT KHUÔN MẪU LỚP (CLASS TEMPLATE) CƠ BẢN VỀ VECTOR Dùng để lưu trữ tập liệu CÙNG KiỂU, giống mảng, Nhưng vector phình to thu nhỏ kích thước lúc chạy chương trình (không giống mảng có kích thước cố định) Thư viện: #include Ví dụ khai báo vector vIA; // Khai báo vector chứa liệu kiểu int vector vIB (10); // Khai báo vector có kích thước ban đầu 10, chứa liệu kiểu int vector vIC (10, 2); // Khai báo vector có kích thước ban đầu 10, chứa liệu kiểu int liệu khởi tạo giá trị MỘT SỐ HÀM THÀNH VIÊN CỦA VECTOR Phương thức Mục đích v.assign(n,e) Gán tập giá trị cho vector, thay nội dung đồng thời thay đổi kích thước v[i] v.at[i] Tham chiếu đến phần tử thứ i vector v.clear() Làm rỗng vector v.pop_back() Xóa phần tử cuối vector v.push_back(e) Thêm phần tử e vào cuối vector v.resize(new_size) Thay đổi kích thước vector … Danh sách đầy đủ có thểm xem SỬ DỤNG ITERATOR Trong lập trình hướng đối tượng (OOP), iterator đối tượng cho phép lập trình viên duyệt qua (traverse) phần tử container, danh sách (list), mảng, vector … C-STRING VÀ LỚP STRING MỤC TIÊU C-Strings: kiểu mảng cho chuỗi ký tự Các công cụ thao tác ký tự (char) Character I/O Hàm thành viên get, put Một số hàm khác: pushback, peek, ignore … Lớp String chuẩn Xử lý chuỗi ký tự với lớp String HAI CÁCH BIỂU DIỄN CHUỖI (STRING) C-strings Một mảng với phần tử có kiểu sở char Chuỗi kết thúc với kí tự null, “\0” Là phương thức cũ kế thừa từ C Lớp String Sử dụng khuôn mẫu (template) C-STRINGS Một mảng phần tử với kiểu sở char Mỗi phần tử mảng ký tự Ký tự mở rộng “\0” Được gọi ký tự rỗng (null character) Là dấu hiệu kết thúc chuỗi ký tự Chúng ta sử dụng C-strings! Ví dụ: literal “Hello” lưu trữ c-string 10 KHUÔN MẪU LỚP Có thể định nghĩa khuôn mẫu cho lớp Những lớp kiểu định nghĩa kiểu liệu trừu tượng Không giống khuôn mẫu hàm, khuôn mẫu lớp khởi tạo cách cung cấp cụ thể kiểu liệu (ví dụ: int, float, string, …) định nghĩa đối tượng 47 VÍ DỤ VỀ KHUÔN MẪU LỚP (1/2) Xem xét hai lớp sau Một lớp để cộng hai số nguyên class Joiner { public: int combine(int x, int y) {return x + y;} }; Một lớp để nối hai chuỗi class Joiner { public: string combine(string x, string y) {return x + y;} }; 48 VÍ DỤ VỀ KHUÔN MẪU LỚP (2/2) Hai lớp thay CHỈ khuôn mẫu lớp sau template class Joiner { public: T combine(T x, T y) {return x + y;} }; 49 SỬ DỤNG KHUÔN MẪU LỚP Joiner jd; Joiner sd; cout