Bài giảng Phương pháp lập trình hướng đối tượng - Hàm dựng, hàm hủy, hàm toán tử - Nguyễn Minh Huy
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 - Hàm dựng, hàm hủy, hàm toán tử - Nguyễn Minh Huy", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_ham_dung_ham.ppt
Nội dung text: Bài giảng Phương pháp lập trình hướng đối tượng - Hàm dựng, hàm hủy, hàm toán tử - Nguyễn Minh Huy
- 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 – GV. Nguyễn Minh Huy 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 – GV. Nguyễn Minh Huy 2
- 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 – GV. Nguyễn Minh Huy 3
- Hàm dựng ◼ Khi đối tượng vừa được tạo: ◼ Giá trị các thuộc tính bằng bao nhiêu? ◼ Đối tượng cần có thông tin ban đầu. ◼ Giải pháp: ➢ Xây dựng phương thức cung cấp thông tin. ➔ Người dùng quên gọi?! ➢ “Làm khai sinh” cho đối tượng! PhanSo HocSinh ▪Tử số?? ▪Họ tên?? ▪Mẫu số?? ▪Điểm văn?? Hàm dựng ra đời!! ▪Điểm toán?? Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 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 void main() { { private: PhanSo p1(1, 2); int m_tuSo; PhanSo p2(2, 3); int m_mauSo; PhanSo *p3 = new PhanSo(2, 3); public: } PhanSo(int tuSo, int mauSo); PhanSo(int giaTri); }; Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 5
- Hàm dựng ◼ Hàm dựng mặc định (default constructor): ◼ Không có tham số. ◼ Dùng tạo đối tượng với thông tin mặc định. ◼ Lớp không có hàm dựng. ➔ Trình biên dịch cung cấp. class PhanSo { void main() private: { int m_tuSo; PhanSo p; int m_mauSo; PhanSo q = new PhanSo; public: } PhanSo(); }; Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 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. class PhanSo void main() { { private: PhanSo p1(1, 2); int m_tuSo; PhanSo p2(p1); int m_mauSo; PhanSo p3 = p2; public: } PhanSo(const PhanSo &p); }; Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 7
- Hàm dựng ◼ 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 – GV. Nguyễn Minh Huy 8
- 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 – GV. Nguyễn Minh Huy 9
- Hàm hủy ◼ 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!! ◼ Giải pháp: ➢ Xây dựng phương thức thu hồi. ➔ Người dùng quên gọi! ➢ Làm “khai tử” cho đối tượng. HocSinh Rò rỉ bộ nhớ!! ▪Họ tên ▪Điểm văn ▪Điểm toán Hàm hủy vào cuộc!! ▪Thu hồi Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 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 ~ class HocSinh { void main() private: { char *m_hoTen; HocSinh h; float m_diemVan; HocSinh *p = new HocSinh; float m_diemToan; delete p; public: } ~HocSinh() { delete m_hoTen; } }; Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 11
- 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 – GV. Nguyễn Minh Huy 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; ➢ Định nghĩa nhiều cách thực hiện khác nhau cho toán tử bằng nạp chồng hàm. PhanSo operator +(const PhanSo &p, int so); float opeartor +(const PhanSo &p, float so); Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 13
- Hàm toán tử ◼ Ưu điểm: ◼ Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa. PhanSo p1, p2; HocSinh h1, h2; PhanSo p3 = p1 + p2; if (h1 > h2) h1++; ◼ Hạn chế: ◼ 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 – GV. Nguyễn Minh Huy 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: ➢ Là phương thức của lớp. ➢ Ngôi của toán tử: đối tượng của lớp + số tham số. PhanSo PhanSo::operator +(const PhanSo &p); bool PhanSo::operator >(const PhanSo &p); ◼ Cách sử dụng 2 loại là như nhau!! Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 15
- Hàm toán tử ◼ Toán tử có thể định nghĩa lại: Ngôi Nhóm Toán tử 1 Ngôi (Unary) Tăng giảm ++, Dấu số học +, - Logic !, ~ Con trỏ *, & Ép kiểu int, float, double, 2 Ngôi (Binary) Số học +, -, *, /, %, +=, -=, *=, /=, %= So sánh >, =, > Gán = Lấy chỉ số mảng [ ] Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 16
- Hàm toán tử ◼ Toán tử không thể định nghĩa lại: Toán tử Ý nghĩa . Truy xuất phần tử .* 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 – GV. Nguyễn Minh Huy 17
- Hàm toán tử ◼ Dr. Guru khuyên: ◼ Những lưu ý khi định nghĩa lại toán tử: ➢ Ngôi: số lượng tham số. ➢ Toán hạng: kiểu dữ liệu tham số. ➢ Kết quả: kiểu trả về. ◼ Ví dụ: ◼ Toán tử >. ◼ Toán tử =. ◼ Toán tử [ ]. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 18
- Tóm tắt ◼ Hàm dựng: ◼ Khởi tạo thông tin ban đầu cho đối tượng. ◼ Bắt buộc gọi khi tạo đối tượng. ◼ 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 – GV. Nguyễn Minh Huy 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: ➢ Ngôi của toán tử giữ nguyên. ➢ Độ ưu tiên của toán tử không đổi. ➢ Không thể tạo toán tử mới. ➢ Không thể định nghĩa lại toán tử cho kiểu cơ bản. ◼ Có 2 loại hàm toán tử: ➢ Toán tử độc lập. ➢ Toán tử thuộc lớp. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 20
- 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 – GV. Nguyễn Minh Huy 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: >, =, >, <<. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 22
- Bài tập ◼ Bài tập 3.2: Bổ sung vào lớp số phức những phương thức sau: (Nhóm tạo hủy) ◼ Khởi tạo mặc định số phức = 0. ◼ Khởi tạo với phần thực và phần ảo cho trước. ◼ Khởi tạo từ giá trị thực cho trước. ◼ Khởi tạo từ một số phức khác. (Nhóm toán tử) ◼ Toán tử số học: +, -, *, /, =, +=, -=. ◼ Toán tử so sánh: >, =, >, <<. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 23
- Bài tập ◼ Bài tập 3.3: Bổ sung vào lớp đơn thức những phương thức sau: (Nhóm tạo hủy) ◼ Khởi tạo mặc định đơn thức = 0. ◼ Khởi tạo với hệ số và số mũ cho trước. ◼ Khởi tạo từ một đơn thức khác. (Nhóm toán tử) ◼ Toán tử số học: +, -, *, /, =, +=, -=. ◼ Toán tử so sánh: >, =, >, <<. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 24
- Bài tập ◼ Bài tập 3.4: Bổ sung vào lớp học sinh những phương thức sau: (Nhóm tạo hủy) ◼ Khởi tạo với họ tên và điểm văn, toán cho trước. ◼ Khởi tạo với họ tên cho trước, điểm văn, toán = 0. ◼ Khởi tạo từ một học sinh khác. ◼ Hủy đối tượng học sinh, thu hồi bộ nhớ. (Nhóm toán tử) ◼ Toán tử so sánh (ĐTB): >, =, >, <<. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 25
- Bài tập ◼ Bài tập 3.5: Bổ sung vào lớp mảng những phương thức sau: (Nhóm tạo hủy) ◼ Khởi tạo mặc định mảng kích thước = 0. ◼ Khởi tạo với kích thước cho trước, các phần tử = 0. ◼ Khởi tạo từ một mảng int [ ] với kích thước cho trước. ◼ Khởi tạo từ một đối tượng IntArray khác. ◼ Hủy đối tượng mảng, thu hồi bộ nhớ. (Nhóm toán tử) ◼ Toán tử gán: =. ◼ Toán tử lấy phần tử: [ ]. ◼ Toán tử ép kiểu: (int *). ◼ Toán tử nhập, xuất: >>, <<. Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy 26