Chương 2: Hàm dựng,
Hàm hủy, Hàm toán tử
Phương pháp lập trình hướng đối tượng .
1
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
Phương pháp lập trình hướng đối tượng .
2
Nội dung
Hàm dựng.
“Làm khai sinh” cho đối tượng!
HocSinh
Họ
tên??
Điểm văn??
Điểm toán??
Phương pháp lập trình hướng đối tượng .
Hàm dựng ra đời!!
4
Hàm dựng
Tính chất hàm dựng (constructor):
Bắt buộc gọi khi tạo đối tượng.
Có thể nạp chồng nhiều hàm dựng.
Trong C++, hàm dựng có tên trùng tên lớp.
class PhanSo
{
private:
int
m_tuSo;
int
m_mauSo;
class PhanSo
{
private:
int
m_tuSo;
int
m_mauSo;
public:
PhanSo();
};
Phương pháp lập trình hướng đối tượng .
void main()
{
PhanSo p;
PhanSo q = new PhanSo;
}
6
Hàm dựng
Hàm dựng sao chép (copy constructor):
Có tham số là đối tượng cùng lớp.
Dùng tạo đối tượng từ đối tượng cùng loại.
Lớp không có hàm dựng sao chép.
Trình biên dịch cung cấp.
Dr. Guru khuyên:
Một lớp nên có tối thiểu 3 hàm dựng:
Hàm dựng mặc định.
Hàm dựng có đầy đủ tham số.
Hàm dựng sao chép.
class PhanSo
{ private:
int
m_tuSo;
int
m_mauSo;
public:
PhanSo();
PhanSo(int tuSo, int mauSo);
PhanSo(const PhanSo &p);
};
Phương pháp lập trình hướng đối tượng .
8
Nội dung
Làm “khai tử” cho đối tượng.
HocSinh
Họ
tên
Điểm văn
Điểm toán
Thu
hồi
Phương pháp lập trình hướng đối tượng .
Rò
Ròrỉrỉbộ
bộnhớ!!
nhớ!!
Hàm hủy vào cuộc!!
10
Hàm hủy
Tính chất hàm hủy (destructor):
Tự động gọi khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
Trong C++, hàm hủy có tên ~<Tên lớp>
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
Phương pháp lập trình hướng đối tượng .
12
Hàm toán tử
Khái niệm hàm toán tử:
Có thể dùng toán tử đặt tên hàm?
Trong C++, dùng từ khóa operator.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
Hệ quả?
Định nghĩa lại cách thực hiện toán tử.
PhanSo p1, p2;
PhanSo p3 = p1 + p2;
Không thể tạo toán tử mới.
Không thể định nghĩa lại toán tử trên kiểu cơ bản.
Ngôi của toán tử giữ nguyên.
Độ ưu tiên của toán tử không đổi.
Đôi khi gây nhầm lẫn!!
Phương pháp lập trình hướng đối tượng .
14
Hàm toán tử
Phân loại hàm toán tử:
Toán tử độc lập:
Không thuộc lớp nào.
Ngôi của toán tử là số tham số truyền vào.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
bool operator >(const PhanSo &p1, const PhanSo &p2);
Toán tử thuộc lớp:
Tăng giảm
++, --
Dấu số học
+, -
Logic
!, ~
Con trỏ
*, &
Ép kiểu
int, float, double, …
Số học
+, -, *, /, %, +=, -=, *=, /=, %=
So sánh
>, <, ==, >=,
.*
Truy xuất con trỏ phần tử
::
Toán tử ::
?:
Toán tử điều kiện
#
Chỉ thị tiền xử lý
##
Chỉ thị tiền xử lý
Phương pháp lập trình hướng đối tượng .
17
Hàm toán tử
Dr. Guru khuyên:
Mỗi lớp có thể có nhiều hàm dựng.
Hàm hủy:
Dọn dẹp bộ nhớ cho đối tượng.
Tự động gọi khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
Phương pháp lập trình hướng đối tượng .
19
Tóm tắt
Hàm toán tử:
Hàm có tên là toán tử.
Dùng định nghĩa lại toán tử.
Ràng buộc:
Phương pháp lập trình hướng đối tượng .
21
Bài tập
Bài tập 3.1:
Bổ sung vào lớp phân số những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định phân số = 0.
Khởi tạo với tử và mẫu cho trước.
Khởi tạo từ giá trị nguyên cho trước.
Khởi tạo từ một phân số khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, >,
Toán tử so sánh: >, <, ==, >=, >,