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
• 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 đủ
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:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_6_templ.pdf
OOP-W6-Demo2.zip
OOP-W6-Template-Static-Singleton-Demo.zip

