Tải bản đầy đủ (.doc) (3 trang)

9 hamvaloptemplate

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (56.76 KB, 3 trang )

HỌC VIỆN KỸ THẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ CƯƠNG BÀI GIẢNG

HỌC PHẦN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bộ môn: Công nghệ phần mềm
Giáo viên: 1) Phạm Thị Bích Vân

Bài IX: Hàm và lớp Template
1. Thời lượng: 5 tiết (GV giảng: 3; bài tập: 2)
2. Mục đích, yêu cầu: Giới thiệu hướng dẫn sinh viên cách cây dựng các hàm, lớp Template. Giới thiệu thư
viện STL, các thành phần của STL và cách sử dụng các thành phần sẵn có trong STL trong lập trình giải
quyết các bài toán.
3. Nội dung:
a) Nội dung chi tiết:
• Các hàm template
Tất cả các hàm template định nghĩa bắt đầu với từ khóa template theo sau một danh sách các
tham số hình thức với hàm template vây quanh trong các ngoặc nhọn (< và >); Mỗi tham số hình
thức phải được đặt trước bởi từ khóa class như:
template <class T>
hoặc template <class T1, class T2,…>
Ví dụ:
Chẳng hạn, chúng ta muốn viết hàm lấy trị tuyệt đối của một số, chúng ta có thể viết nhiều
dạng khác nhau như sau:
int MyAbs(int X)
{
return X>=0?X:-X;
}
long MyAbs(long X)
{


return X>=0?X:-X;
}
double MyAbs(double X)
{
return X>=0?X:-X;
}

Khi đó, hàm trị tuyệt đối ở trên viết theo hàm template:
template <class T>
T MyAbs(T x)
{
return (x>=0)?x:-x;
}
Hàm template MyAbs() khai báo một tham số hình thức T cho kiểu của một số. T được tham
khảo như một tham số kiểu. Khi trình biên dịch phát hiện ra một lời gọi hàm MyAbs() trong chương
trình, kiểu của tham số thứ nhất của hàm MyAbs() được thay thế cho T thông qua định nghĩa
template, và C++ tạo một hàm template đầy đủ để trả về trị tuyệt đối của một số của kiểu dữ liệu đã
cho. Sau đó, hàm mới tạo được biên dịch. Chẳng hạn:
cout<Bộ môn Công nghệ phần mềm


cout<Trong lần gọi thứ nhất, hàm MyAbs() có tham số thực là int nên trình biên dịch tạo ra hàm
int MyAbs(int) theo dạng của hàm template, lần thứ hai sẽ tạo ra hàm float MyAbs(float)
• Các lớp template


Bên cạnh hàm template, ngôn ngữ C++ còn trang bị thêm lớp template, lớp này cũng mang đầy




đủ ý tưởng của hàm template. Các lớp template được gọi là các kiểu có tham số (parameterized
types) bởi vì chúng đòi hỏi một hoặc nhiều tham số để mô tả làm thế nào tùy chỉnh một lớp
template chung để tạo thành một lớp template cụ thể.
Hàm thành viên định nghĩa bên ngoài lớp template bắt đầu với phần đầu là template <class T>.



Sau đó mỗi định nghĩa tương tự một định nghĩa hàm thường ngoại trừ kiểu phần tử luôn luôn
được liệt kê tổng quát như tham số kiểu T. Chẳng hạn:
template<class T>
int Stack<T>::Push(const T &Item)
{
…………….
}
STL



STL (Standard Template Library) là một bộ thư viện vô cùng hữu dụng của C++ dùng để làm



việc với các cấu trúc dữ liệu phổ biến như danh sách, hàng đợi, ngăn xếp và các phép toán chủ
yếu với các cấu trúc dữ liệu này như tìm kiếm, sắp xếp, truy xuất, thêm, xóa, sửa.
STL bao gồm:

+ Các container (các bộ lưu trữ dữ liệu) là các cấu trúc dữ liệu phổ biến đã template hóa dùng để lưu
trữ các kiểu dữ liệu khác nhau. Các container chia làm 2 loại:

- sequential container (các bộ lưu trữ dữ liệu tuần tự) bao gồm list, vector và deque
- associative container (các bộ lưu trữ dữ liệu liên kết) bao gồm map, multimap, set và
multiset
+ Các iterator (các con trỏ dữ liệu) là các con trỏ để trỏ đến các phần tử trong các bộ lưu trữ
+ Các algorithm (các thuật toán lưu trữ dữ liệu) là các hàm phổ biến để làm việc với các bộ lưu trữ
như thêm, xóa, sửa, truy xuất, tìm kiếm, sắp xếp.
+ Các function object (các đối tượng hàm) là các hàm và phép toán phổ biến để làm việc với các
phần tử được lưu trữ cũng như các bộ lưu trữ và các thuật toán lưu trữ như cộng, trừ, nhân, chia, so
sánh
+ Các adapter (các bộ tương thích) Các adapter chia làm 3 loại
- container adapter (các bộ tương thích lưu trữ) bao gồm stack, queue và priority_queue
- iterator adapter (các bộ tương thích con trỏ)
- function adapter (các bộ tương thích hàm)
 Container.


LIST

List trong STL là danh sách liên kết đôi, không hỗ trợ random access (truy xuất dữ liệu bất
kì) Nghĩa là nếu bạn muốn truy xuất một phần tử bất kì trong list thì bạn phải truy xuất từ phần tử
đầu tiên hoặc phần tử cuối cùng của list rồi truy xuất dần đến phần tử đó. Khởi tạo sao chép list có
thể khởi tạo sao chép từ mảng, từ list khác hoặc từ các container khác
• VECTOR: vector giống list ngoại trừ
- cho phép random access, với operator[], nghĩa là v[5], v[6], etc như mảng
- được tối ưu hóa với các phép toán ở phía đuôi (rear operations)
Bộ môn Công nghệ phần mềm





- không có sẵn các hàm push_front,pop_front,splice,sort,merge,reserve
DEQUE

Deque giống list ngoại trừ
- cho phép random access, với operator[], nghĩa là d[5], d[6], etc như mảng
- được tối ưu hóa với các phép toán ở phía đầu (front operations)
- không có sẵn các hàm splice,sort,merge,reserve
• ALGORITHM
Do vector và deque không có sẵn các hàm splice,sort,merge,reserve nên nếu ta muốn sử
dụng các chức năng này với vector và deque ta phải dùng các hàm trong thư viện algorithm.
b) Nội dung thảo luận: Ứng dụng của Template, ưu điểm của việc dùng các thành phần có sẵn
trong STL
c) Nội dung tự học: Thực hành xây dựng các hàm Template, lớp Template. Sử dụng các thành phần
trong bộ thư viện STL để giải quyết các bài toán.
d) Bài tập (bắt buộc, mở rộng):
Bài 1: Viết hàm template trả về giá trị trung bình của một mảng, các tham số hình thức của hàm này
là tên mảng và kích thước mảng.
Bài 2: Cài đặt hàng đợi template.
Bài 3: Cài đặt lớp template dùng cho cây nhị phân tìm kiếm (BST).
Bài 4: Cài đặt lớp template cho vector để quản lý vector các thành phần có kiểu bất kỳ.
Bài 5: Viết hàm template để sắp xếp kiểu dữ liệu bất kỳ.
Bài 6: Trong C++, phép toán new được dùng để cấp phát bộ nhớ, khi không cấp phát được con trỏ
có giá trị NULL. Hãy cài đặt lại các lớp Matrix và Vector trong đó có bổ sung thêm thành viên là lớp
exception với tên gọi là Memory để kiểm tra việc cấp phát này.
Bài 7: Tạo một list, đưa phần tử vào và truy xuất phần tử sử dụng List của STL
Bài 8: Cho file SinhVien.txt gồm mã,tên, lớp,địa chỉ. Sử dụng đối tượng List trong thư viện STL để
đọc danh sách sinh viên, hiển thị thông lên màn hình, cho phép thay đổi, lưu thông tin sinh viên vào
file.
4. Tài liệu tham khảo (sách, báo – chi tiết đến chương, mục, trang)
• Lập trình hướng đối tượng với C++ / Lê Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn

Thanh Thủy (Chủ biên), - Hà Nội : Khoa học và Kỹ thuật, 2009. -346 trang. Chương VI.
• Object-Oriented Programming in C++ (4th Edition) / Robert Lafore. Sams Publishing, 2002.
Chapters 14, 15.
5. Câu hỏi ôn tập
- Template là gì?
- Cú pháp khai báo các hàm Template?
- Cú pháp khai báo các lớp Template?
- STL là gì?
- STL gồm những thành phần nào?
- Ưu nhược điểm của các thành phần trong STL?

Bộ môn Công nghệ phần mềm



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×