Giáo trình Hệ điều hành - Chương 5: Phương thức thiết lập, phương thức phá hủy
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành - Chương 5: Phương thức thiết lập, phương thức phá hủy", để 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:
- giao_trinh_he_dieu_hanh_chuong_5_phuong_thuc_thiet_lap_phuon.pdf
Nội dung text: Giáo trình Hệ điều hành - Chương 5: Phương thức thiết lập, phương thức phá hủy
- Khoa CNTT LTHĐT Chƣơng 5 PHƢƠNG THỨC THIẾT LẬP, PHƢƠNG THỨC PHÁ HỦY GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 1 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 0. MỤC TIÊU Hiểu được phương thức thiết lập là gì? Hiểu được phương thức phá hủy là gì? GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 2 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1. PHƢƠNG THỨC THIẾT LẬP CONSTRUCTORS Mục tiêu: các phương thức thiết lập của một lớp có nhiệm vụ thiết lập thông tin ban đầu cho các đối tượng thuộc về lớp ngay khi đối tượng được khai báo. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 3 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.1 CÁC ĐẶC ĐIỂM CỦA PHƢƠNG THỨC THIẾT LẬP Tên phƣơng thức thiết lập trùng với tên lớp. Không có giá trị trả về. Đƣợc tự động gọi thực hiện ngay khi đối tƣợng đƣợc khai báo. Có thể có nhiều phƣơng thức thiết lập trong 1 lớp. Các phƣơng thức thiết lập của lớp thuộc nhóm các phƣơng thức khởi tạo. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 4 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.2 PHÂN LOẠI PHƢƠNG THỨC THIẾT LẬP Ta có thể chia các phương thức thiết lập của một lớp thành 3 nhóm như sau: Phương thức thiết lập mặc định (default constructor). Phương thức thiết lập sao chép (copy constructor). Phương thức thiết lập nhận tham số đầu vào. Phương thức thiết lập mặc định là phương thức thiết lập các thông số ban đầu cho đối tượng thuộc về lớp bằng những giá trị mặc định (do người lập trình quyết định). GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 5 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.2 PHÂN LOẠI PHƢƠNG THỨC THIẾT LẬP Phương thức thiết lập sao chép (copy constructor) là phương thức thiết lập nhận tham số đầu vào là một đối tượng cùng thuộc về lớp. Các thông tin ban đầu của đối tượng sẽ hoàn toàn giống thông tin của đối tượng tham số đầu vào. Ngoài ra, người ta còn nói phương thức thiết lập sao chép được sử dụng để tạo ra đối tượng mới giống hoàn toàn đối tượng đã có sẵn. Phương thức thiết lập nhận tham số đầu vào là những phương thức thiết lập không phải là phương thức thiết lập mặc định và phương thức thiết lập sao chép. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 6 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.3 VÍ DỤ MINH HỌA PHƢƠNG THỨC THIẾT LẬP Bài toán: Hãy khai báo và định nghĩa các phương thức thiết lập cơ bản cho lớp đối tượng CPhanSo Khai báo lớp 11. class CPhanSo 12.{ 13. private: 14. int tu; 15. int mau; 16. public: 17. CPhanSo(); 18. CPhanSo(int, int); 19. CPhanSo(const CPhanSo&); 20.}; GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 7 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.3 VÍ DỤ MINH HỌA PHƢƠNG THỨC THIẾT LẬP Định nghĩa phương thức thiết lập mặc định. 1. CPhanSo::CPhanSo() 2. { 3. tu = 0; 4. mau = 1; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 8 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.3 VÍ DỤ MINH HỌA PHƢƠNG THỨC THIẾT LẬP Định nghĩa phương thức thiết lập sao chép 1. CPhanSo::CPhanSo(const CPhanSo&x) 2. { 3. tu = x.tu; 4. mau = x.mau; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 9 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.3 VÍ DỤ MINH HỌA PHƢƠNG THỨC THIẾT LẬP Định nghĩa phương thức thiết lập khi biết đầy đủ thông tin 1. CPhanSo::CPhanSo(int t, int m) 2. { 3. tu = t; 4. mau = m; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 10 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.4 HƢỚNG DẪN SỬ DỤNG 1 Hãy xem xét đoạn chương trình sau và cho biết có bao nhiêu phương thức gọi thực hiện: 1. CPhanSo a; 2. a.Nhap(); 3. a.Xuat(); Trả lời: Phương thức . Phương thức nhập. Phương thức xuất. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 11 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.5 HƢỚNG DẪN SỬ DỤNG 2 Hãy xem xét đoạn chương trình sau và cho biết có bao nhiêu phương thức gọi thực hiện: 1. CPhanSo a, b(1,2); 2. a.Nhap(); 3. b.Xuat(); 4. CPhanSo c(a); 5. c.Xuat(); Trả lời: Phương thức thiết lập mặc định (đối tượng a) Phương thức . Phương thức . Phương thức . Phương thức . Phương thức . GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 12 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.6 Ý NGHĨA SỬ DỤNG PHƢƠNG THỨC THIẾT LẬP Khởi tạo giá trị ban đầu cho các đối tượng thuộc về lớp ngay khi các đối tượng được khai báo. Ép kiểu từ một kiểu (đối tượng) này sang một đối tượng khác. Phương thức thiết lập sao chép được gọi khi truyền tham trị hoặc trả về kiểu tham trị vì vậy tham số truyền vào của phương thức thiết lập sao chép phải là tham chiếu (tại sao?) GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 13 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.6 Ý NGHĨA SỬ DỤNG PHƢƠNG THỨC THIẾT LẬP Minh họa ép kiểu từ đối tượng này sang đối tượng khác. 11. class CPhanSo 12.{ 13. private: 14. int tu; 15. int mau; 16. public: 17. CPhanSo(); 18. CPhanSo(int); 19.}; GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 14 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.6 Ý NGHĨA SỬ DỤNG PHƢƠNG THỨC THIẾT LẬP Minh họa ép kiểu từ đối tượng này sang đối tượng khác. 1. CPhanSo::CPhanSo() 2. { 3. tu = 0; 4. mau = 1; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 15 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.6 Ý NGHĨA SỬ DỤNG PHƢƠNG THỨC THIẾT LẬP Minh họa ép kiểu từ đối tượng này sang đối tượng khác. 1. CPhanSo::CPhanSo(int so) 2. { 3. tu = so; 4. mau = 1; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 16 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.6 Ý NGHĨA SỬ DỤNG PHƢƠNG THỨC THIẾT LẬP Minh họa ép kiểu từ đối tượng này sang đối tượng khác. 1. void main() 2. { 3. CPhanSo a; 4. a = (CPhanSo)3; // a = 3; 5. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 17 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.7 ỨNG DỤNG Bài toán: Hãy khai báo và định nghĩa các phương thức thiết lập cơ bản cho lớp đối tượng ngày. Khai báo lớp. 11. class CNgay 12. { 13. private: 14. int ng; 15. int th; 16. int nm; 17. public: 18. CNgay(); 19. CNgay(const CNgay &); 20. CNgay(int,int,int); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 18 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.7 ỨNG DỤNG Định nghĩa phương thức thiết lập mặc định. 11. CNgay::CNgay() 12. { 13. ng = 1; 14. th = 1; 15. nm = 1; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 19 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.7 ỨNG DỤNG Định nghĩa phương thức thiết lập khi biết đầy đủ thông tin. 11. CNgay::CNgay(int ngng, int thth, int nmnm) 12. { 13. ng = ngng; 14. th = thth; 15. nm = nmnm; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 20 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 1.7 ỨNG DỤNG Định nghĩa phương thức thiết lập sao chép. 11. CNgay::CNgay(const CNgay &x) 12. { 13. ng = x.ng; 14. th = x.th; 15. nm = x.nm; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 21 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 2. PHƢƠNG THỨC PHÁ HỦY DESTRUCTOR Mục tiêu: Phương thức phá hủy của một lớp có nhiệm vụ dọn dẹp “xác chết” của đối tượng khi đối tượng “đi bán muối”. Nói một cách khác, phương thức phá hủy có nhiệm vụ thu hồi lại tất cả các tài nguyên đã cấp phát cho đối tượng khi đối tượng hết phạm vi hoạt động. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 22 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 2. PHƢƠNG THỨC PHÁ HỦY DESTRUCTOR Tên phương thức trùng với tên lớp nhưng có dấu ngã ở đằng trước. Không có giá trị trả về. Không có tham số đầu vào. Được tự động gọi thực hiện khi đối tượng hết phạm vi sử dụng. Phương thức phá huỷ thuộc nhóm các phương thức xử lý. Có và chỉ có duy nhất một phương thức phá huỷ trong 1 lớp mà thôi. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 23 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 2.2 VÍ DỤ MINH HỌA PHƢƠNG THỨC PHÁ HỦY Bài toán: Hãy khai báo và định nghĩa phương thức phá hủy cho lớp đối tượng CPhanSo Khai báo lớp 1. class CPhanSo 2. { 3. private: 4. int tu; 5. int mau; 6. public: 7. // Phương thức xử lý 8. ~CPhanSo(); 9. }; GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 24 Th S. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 2.2 VÍ DỤ MINH HỌA PHƢƠNG THỨC PHÁ HỦY Định nghĩa phương thức phá hủy. 1. CPhanSo::~CPhanSo() 2. { 3. return; 4. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 25 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 2.3 HƢỚNG DẪN SỬ DỤNG Hãy cho biết đoạn chương trình sau có bao nhiêu phương thức được gọi thực hiện. Biết rằng trong lớp đối tượng CPhanSo ta đã định nghĩa 3 pttl cơ bản và phương thức phá hủy. Đoạn chương trình 11. int x; 12. int y; 13. x = 5; 14. y = 7; 15. if (y > x) 16. { 17. CPhanSo a; 18. a.Nhap(); 19. a.Xuat(); 20. } 21. cout << x << y; GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 26 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 3. BÀI TẬP VỀ NHÀ Hãy khai báo và định nghĩa các phương thức thiết lập cơ bản và phương thức phá hủy cho các lớp đối tượng sau: (làm vào vở bài tập) 1. Lớp phân số (CPhanSo) 2. Lớp điểm (CDiem) 3. Lớp ngày (CNgay) 4. Lớp thời gian (CThoiGian) 5. Lớp đơn thức (CDonThuc) 6. Lớp điểm không gian (CDiemKhongGian) 7. Lớp đường thẳng (CDuongThang) 8. Lớp hỗn số (CHonSo) 9. Lớp số phức (CSoPhuc) 10. Lớp đường tròn (CDuongTron) 11. Lớp lớp tam giác (CTamGiac) 12. Lớp hình cầu (CHinhCau) GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 27 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 4. BÀI TẬP NỘP MOODLE Bài 1: Viết chương trình để thực hiện được hàm main như sau đối với đối tượng CPhanSo. 1. void main() 2. { 3. CPhanSo a; 4. cout << a; 5. CPhanSo b(1,2); 6. cout << b; 7. CPhanSo c(b); 8. cout << c; 9. } Bài 2 đến Bài 12: Viết tương tự cho các lớp đối tượng còn lại. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 28 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 4. BÀI TẬP NỘP MOODLE Yêu cầu chung: Làm tất cả các bài tập trong một workspace có tên là MSSV_BT05. Trong workspace có 12 project tương ứng với từng bài tập (BT01, BT02, BT03, BT12) Nộp bài tập lên hệ thống Moodle theo qui định. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 29 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT Xét chƣơng trình sau 11. class CDiem 12. { 13. private: 14. float x; 15. float y; 16. public: 17. void Nhap(); 18. }; 19. void main() 20. { 21. CDiem A; 22. A.Nhap(); 23. CDiem B(A); 24. } 25. void CDiem::Nhap() 26. { 27. cin >> x >> y; 28. } GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 30 ThS . Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 5. CÂU HỎI THẢO LUẬN Câu hỏi: Tại sao không có lỗi khi: Không có phương thức khởi tạo mặc định Không có phương thức khởi tạo sao chép Không có phương thức phá hủy GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 31 ThS. Nguyễn Tấn Trần Minh Khang
- Khoa CNTT LTHĐT 5. GỢI Ý Nếu một lớp không khai báo bất kỳ phương thức khởi tạo nào thì chương trình sẽ tự động tạo ra một phương thức khởi tạo mặc định rỗng Nếu một lớp không khai báo phương thức khởi tạo sao chép thì chương trình sẽ tự động tạo ra một phương thức khởi tạo sao chép với nội dung sẽ gán các thuộc tính liên quan đến đối tượng Nếu một lớp không khai báo phương thức phá hủy thì chương trình sẽ tự động tạo ra một phương thức phá hủy rỗng. GV. Nguyễn Sơn Hoàng Quốc Chương 05 - 32 ThS. Nguyễn Tấn Trần Minh Khang