Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 6: Template và thành phần tĩnh - Nguyễn Lê Hoàng Dũng

TEMPLATE  
VÀ THÀNH PHẦN TĨNH  
Nguyễn Lê Hoàng Dũng  
1
• 3 VẤN ĐỀ VỀ CON TRỎ  
• TEMPLATE  
• THÀNH PHẦN TĨNH  
NỘI DUNG  
2
ꢀ Phương pháp lập trình hướng đối tượng  
3 VẤN ĐỀ VỀ CON TRỎ  
3
3 VẤN ĐỀ CON TRỎ  
• Vấn đề 1: Phải dùng hàm hủy để dọn dẹp bộ  
nhớ  
.h  
//Các thư viện  
class CMang{  
private:  
int _iSoLuong;  
int* _DuLieu;  
public:  
CMang()  
{
_iSoLuong = 0;  
}
CMang(int soLuong)  
{
_iSoLuong = soLuong;  
_DuLieu = new int[_iSoLuong];  
}
};  
4
ꢀ Phương pháp lập trình hướng đối tượng  
HÀM HỦY  
• Giải quyết vấn đề rò rỉ bộ nhớ (memory leak):  
• Khi hoạt động, đối tượng có cấp phát bộ  
nhớ.  
• Khi hủy đi, bộ nhớ không được thu hồi!  
• Làm cách nào để thu hồi?  
• Xây dựng phương thức thu hồi.  
=> Người dùng có thể quên gọi!  
CMang  
_DuLieu  
_iSoLuong  
Rò rỉ bộ nhớ!  
Hàm hủy vào cuộc  
5
ꢀ Phương pháp lập trình hướng đối tượng  
3 VẤN ĐỀ CON TRỎ  
• Vấn đề 2: Phải cài đặt lại hàm dựng sao chép  
• Hàm dựng sao chép mặc định sao chép giá  
trị từng thuộc tính  
.cpp  
int main(int argc, const char * argv[])  
{
// insert code here...  
CMang a1;  
CMang a2(a1);  
return 0;  
}
6
ꢀ Phương pháp lập trình hướng đối tượng  
3 VẤN ĐỀ CON TRỎ  
Dùng chung bộ nhớ! Vùng nhớ chung bị hủy?!  
a
y  
§m_iS
§m_pData  
5
§m_pData  
101  
1 2 3 4 5  
101  
Phải cài đặt lại hàm dựng sao chép  
7
ꢀ Phương pháp lập trình hướng đối tượng  
3 VẤN ĐỀ CON TRỎ  
• Vấn đề 2: Phải cài đặt lại toán tử gán  
• Toán tử gán mặc định sao chép giá trị từng  
thuộc tính.  
.cpp  
int main(int argc, const char * argv[])  
{
// insert code here...  
CMang a1(5);  
CMang a2(6);  
a2 = a1;  
return 0;  
}
8
ꢀ Phương pháp lập trình hướng đối tượng  
3 VẤN ĐỀ CON TRỎ  
Rò rỉ, mất bộ nhớ?!  
Dùng chung bộ nhớ!  
a
4 5 6  
§m_i
§m_pData  
§m_iSize  
§m_pData  
6
1 2 3 4 5  
405  
Phải cài đặt lại toán tử gán  
9
ꢀ Phương pháp lập trình hướng đối tượng  
TEMPLATE  
10  
FUNCTION TEMPLATE  
• Xét hàm tìm min giữa 2 số:  
int timMin(int a, int b)  
ꢀ
Tìm min 2 số thực  
{ꢀ  
return (a < b) ? a : b;  
ꢀ
}
fl
ꢀ
Dùng Function Template  
{
ꢀ
r
ꢀ
}
PhanSo timMin(PhanSo a, PhanSo b)  
{
ꢀ
Tìm min 2 phân số  
ꢀ
return (a < b) ? a : b;  
ꢀ
}
11  
ꢀ Phương pháp lập trình hướng đối tượng  
FUNCTION TEMPLATE  
Hàm tìm min dùng Function Template:  
void main()  
{
ꢀ
ꢀ
int a = 5, b = 3;  
int c = timMin(a, b);  
ꢀ
ꢀ
template <class T>  
T timMin(T a, T b)  
ꢀ
{ꢀ  
return (a < b) ? a : b;  
float d = timMin(1.5, 2.3);  
ꢀ
ꢀ
}
PhanSo p1(1, 2);  
PhanSo p2(1, 3);  
ꢀ
ꢀ
PhanSo p3 = timMin(p1, p2);  
ꢀ
}
12  
ꢀ Phương pháp lập trình hướng đối tượng  
FUNCTION TEMPLATE  
• Đặc điểm của Function Template:  
• Hàm tổng quát cho nhiều kiểu dữ liệu khác  
nhau.  
• Tham số hóa kiểu dữ liệu.  
• Kiểu cụ thể được quyết định khi gọi hàm.  
• Ghi chú:  
• Từ khóa “class” có thể thay bằng “typename”.  
• Phần khai báo và cài đặt đều có khai báo  
template.  
• Phần cài đặt hàm phải nằm cùng file:  
• Phần khai báo hàm.  
• Phần gọi sử dụng hàm.  
13  
ꢀ Phương pháp lập trình hướng đối tượng  
CLASS TEMPLATE  
• Xét lớp đối tượng mảng:  
class MangNguyen  
ꢀ
Mảng phân số  
{ private:  
ꢀ
intm_iKichThuoc;  
int*m_pDuLieu;  
ꢀ
pu
M
i
ꢀ
ꢀ
Dùng Class Template  
ꢀ
};  
class MangPhanSo  
ꢀ
{ private:  
intm_iKichThuoc;  
PhanSo*m_pDuLieu;  
public:  
Mang(int iKichThuoc);  
PhanSo LayPhanTu(int iViTri);  
};  
ꢀ
Cách đơn giản hơn?!  
ꢀ
ꢀ
ꢀ
ꢀ
14  
ꢀ Phương pháp lập trình hướng đối tượng  
CLASS TEMPLATE  
Lớp mảng dùng Class Template  
template <class T>  
class Mang  
void main()  
{
ꢀ
ꢀ
{
ꢀ
Mang<int> m1(10);  
int a = m1.layPhanTu(5);  
ꢀ
private:  
int m_iKichThuoc;  
T *m_pDuLieu;  
public:  
ꢀ
ꢀ
ꢀ
ꢀ
Mang<PhanSo> m2(5);  
PhanSo p =  
ꢀ
ꢀ
Mang(int iKichThuoc);  
T layPhanTu(int iViTri);  
};  
m2.layPhanTu(2);  
ꢀ
}
15  
ꢀ Phương pháp lập trình hướng đối tượng  
CLASS TEMPLATE  
• Đặc điểm của Class Template:  
• Lớp tổng quát cho nhiều kiểu dữ liệu khác  
nhau.  
• Tham số hóa kiểu dữ liệu.  
• Kiểu cụ thể được truyền vào khi tạo đối tượng.  
• Ghi chú:  
• Từ khóa “class” có thể thay bằng  
“typename”.  
• Phần cài đặt lớp phải nằm cùng file:  
• Phần khai báo lớp.  
• Phần tạo và sử dụng đối tượng của lớp.  
=> Viết cài đặt bên trong lớp khi dùng Template.  
16  
ꢀ Phương pháp lập trình hướng đối tượng  
DEMO TEMPLATE  
17  
THÀNH PHẦN TĨNH  
18  
THÀNH PHẦN TĨNH  
• Ví dụ dẫn nhập: lớp NhanVien biểu diễn cho đối  
tượng nhân viên nhà nước, với các thuộc tính:  
- Chức danh (0: trợ giảng, 1: giảng viên, 2:  
giảng viên chính)  
- Hệ số lương (hệ số này tuỳ thuộc vào chức  
danh:  
Hệ số lương = 0.8 + chức danh*0.5  
- Lương cơ bản: do nhà nước quy định, tất cả  
các nhân viên đều có cùng mức lương cơ bản  
- Lương = lương cơ bản * hệ số lương  
19  
ꢀ Phương pháp lập trình hướng đối tượng  
THÀNH PHẦN TĨNH  
Nhân viên A  
Nhân viên B  
Làm sao đảm bảo  
lương cơ bản đều là 1050K!?  
Chức danh: Giảng viên chính  
Hệ số lương: 1.8  
Lương cơ bản: 1050k  
Lương: 1890k  
20  
ꢀ Phương pháp lập trình hướng đối tượng  
Tải về để xem bản đầy đủ
pdf 32 trang myanh 16740 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 6: Template và thành phần tĩnh - Nguyễn Lê Hoàng Dũng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_6_templ.pdf
  • zipOOP-W6-Demo2.zip
  • zipOOP-W6-Template-Static-Singleton-Demo.zip