Giáo trình Hệ điều hành - Chương 4: Sơ lược thư viện IOSTREAM.H - Nguyễn Sơn Hoàng Quốc

pdf 39 trang huongle 3620
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 4: Sơ lược thư viện IOSTREAM.H - Nguyễn Sơn Hoàng Quốc", để 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:

  • pdfgiao_trinh_he_dieu_hanh_chuong_4_so_luoc_thu_vien_iostream_h.pdf

Nội dung text: Giáo trình Hệ điều hành - Chương 4: Sơ lược thư viện IOSTREAM.H - Nguyễn Sơn Hoàng Quốc

  1. Khoa CNTT LTHĐT Chƣơng 4 SƠ LƢỢC THƢ VIỆN IOSTREAM.H GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 1 ThS. Nguyễn Tấn Trần Minh Khang
  2. Khoa CNTT LTHĐT 1. VÍ DỤ DẪN NHẬP 1 Bài toán: Viết lệnh nhập giá trị cho một số nguyên a và xuất số nguyên ra màn hình bằng cách sử dụng thư viện iostream.h Phong cách cũ 1. int a; 2. printf("Nhap mot so nguyen:"); 3. scanf("%d",&a); 4. printf("So nguyen vua nhap:%d",a); Đoạn chương trình với thư viện iostream.h 1. int a; 2. cout >a; 4. cout<<"So nguyen vua nhap:"<<a; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 2 ThS. Nguyễn Tấn Trần Minh Khang
  3. Khoa CNTT LTHĐT 2. VÍ DỤ DẪN NHẬP 2 Bài toán: Viết hàm nhập thông tin của một phân số bằng cách sử dụng thư viện iostream.h Cấu trúc dữ liệu 1. struct phanso 2. { 3. int tu; 4. int mau; 5. }; 6. typedef struct phanso PHANSO; Định nghĩa hàm GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 3 ThS. Nguyễn Tấn Trần Minh Khang
  4. Khoa CNTT LTHĐT 2. VÍ DỤ DẪN NHẬP 2 (tiếp) Định nghĩa hàm 11. void Nhap(PHANSO &x) 12. { 13. cout >x.tu; 15. cout >x.mau; 17. } 18. void Xuat(PHANSO x) 19. { 20. cout<<x.tu<<"/"<<x.mau; 21. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 4 ThS. Nguyễn Tấn Trần Minh Khang
  5. Khoa CNTT LTHĐT 3. ĐẶT VẤN ĐỀ Nhập xuất một đối tượng phân số 1. CPhanSo a; 2. a.Nhap(); 3. a.Xuat(); Nhập, xuất một đối tượng phân số với thư viện iostream.h 1. CPhanSo a; 2. cin>>a; Làm sao? 3. cout > được gọi là toán tử vào. Ký hiệu << được gọi là toán tử ra. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 5 ThS. Nguyễn Tấn Trần Minh Khang
  6. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ Để giải quyết vấn đề trên ta phải định nghĩa  Toán tử vào (operator >>)  Toán tử ra (operator <<) cho lớp đối tượng CPhanSo. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 6 ThS. Nguyễn Tấn Trần Minh Khang
  7. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. #include 12. class CPhanSo 13.{ 14. private: 15. int tu; 16. int mau; 17. public: 18. void operator >(istream&); 20.}; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 7 ThS. Nguyễn Tấn Trần Minh Khang
  8. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử vào 1. void CPhanSo::operator>>(istream &is) 2. { 3. cout > tu; 5. cout > mau; 7. } Phép toán trên 8. void main() không tự nhiên? 9. { Có cách nào khác 10. CPhanSo a; 11. a >> cin; 12. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 8 ThS. Nguyễn Tấn Trần Minh Khang
  9. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử ra 1. void CPhanSo::operator<<(ostream& os) 2. { 3. os<< tu<<"/"<<mau; 4. } 5. void main() 6. { 7. CPhanSo a; 8. a << cout; Phép toán trên không 9. } tự nhiên? Có cách nào khác GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 9 ThS. Nguyễn Tấn Trần Minh Khang
  10. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) cout << a; Nhận xét: Tham số đầu tiên là cout, tham số thứ hai là một đối tượng thuộc lớp CPhanSo. Ta không thể viết phương thức như sau trong lớp ostream vì ostream là lớp của thư viện. void ostream::operator<<(CPhanSo) Giải pháp: Chuyển sang viết hàm như sau void operator<<(ostream&, CPhanSo) GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 10 ThS. Nguyễn Tấn Trần Minh Khang
  11. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. } 17. void operator >(istream&,CPhanSo&); GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 11 ThS. Nguyễn Tấn Trần Minh Khang
  12. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) 11. void main() 12. { 13. CPhanSo a; 14. cin >> a; 15. cout << a; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 12 ThS. Nguyễn Tấn Trần Minh Khang
  13. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử vào 1. void operator >>(istream &is, CPhanSo &x) 2. { 3. cout > x.tu; 5. cout > x.mau; 7. } 11. void main() 12. { 13. CPhanSo a; 14. cin >> a; 15. cout << a; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 13 ThS. Nguyễn Tấn Trần Minh Khang
  14. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử ra 1. void operator > a; 15. cout << a; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 14 ThS. Nguyễn Tấn Trần Minh Khang
  15. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Trong khi giải quyết vấn đề này ta còn sử dụng kỹ thuật hàm bạn (friend function) của phương pháp lập trình hướng đối tượng. Một "hàm bạn" của lớp đối tượng được phép truy xuất đến tất cả các thành phần của đối tượng thuộc về lớp đó bất chấp thành phần được khai báo trong phạm vi nào. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 15 ThS. Nguyễn Tấn Trần Minh Khang
  16. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 16 ThS. Nguyễn Tấn Trần Minh Khang
  17. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 17 ThS. Nguyễn Tấn Trần Minh Khang
  18. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 18 ThS. Nguyễn Tấn Trần Minh Khang
  19. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 19 ThS. Nguyễn Tấn Trần Minh Khang
  20. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 20 ThS. Nguyễn Tấn Trần Minh Khang
  21. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 21 ThS. Nguyễn Tấn Trần Minh Khang
  22. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 22 ThS. Nguyễn Tấn Trần Minh Khang
  23. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 23 ThS. Nguyễn Tấn Trần Minh Khang
  24. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 24 ThS. Nguyễn Tấn Trần Minh Khang
  25. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 25 ThS. Nguyễn Tấn Trần Minh Khang
  26. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 26 ThS. Nguyễn Tấn Trần Minh Khang
  27. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử vào 1. istream& operator >>(istream &is, CPhanSo &x) 2. { 3. cout > x.tu; 5. cout > x.mau; 7. return is; 8. } GV. Nguyễn SơnTại Hoàng sao phảiQuốc trả về một đối Chương 04 - 27 ThS. Nguyễn Tấtượngn Trần Mthuộcinh K lớphang istream?
  28. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 28 ThS. Nguyễn Tấn Trần Minh Khang
  29. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Định nghĩa toán tử ra 1. ostream& operator <<(ostream &os, CPhanSo x) 2. { 3. os<< x.tu<<"/"<<x.mau; 4. return os; 5. } Tại sao phải trả về một đối tượng thuộc lớp ostream? GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 29 ThS. Nguyễn Tấn Trần Minh Khang
  30. Khoa CNTT LTHĐT 4. GIẢI QUYẾT VẤN ĐỀ (tiếp) Khai báo lớp 11. class CPhanSo 12. { 13. private: 14. int tu; 15. int mau; 16. public: 17. friend istream& operator >> 18. (istream &is,CPhanSo &x); 19. friend ostream& operator << 20. (ostream &os,CPhanSo &x); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 30 ThS. Nguyễn Tấn Trần Minh Khang
  31. Khoa CNTT LTHĐT 5. HƢỚNG DẪN SỬ DỤNG 1 Hãy xem xét đoạn chương trình sau: 1. CPhanSo a; 2. cin >> a; 3. cout > được gọi thực hiện với 2 đối số là cin và đối tượng a. Trong câu lệnh thứ ba của đoạn chương trình trên ta nói: hàm operator << được gọi thực hiện với 2 đối số là cout và đối tượng a. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 31 ThS. Nguyễn Tấn Trần Minh Khang
  32. Khoa CNTT LTHĐT 6. HƢỚNG DẪN SỬ DỤNG 2 Hãy xem xét đoạn chương trình sau: 1. CPhanSo a,b,c; 2. cin >>a >>b >>c; 3. cout > được gọi thực hiện 3 lần. Trong câu lệnh thứ ba của đoạn chương trình trên ta nói: hàm operator << được gọi thực hiện 3 lần. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 32 ThS. Nguyễn Tấn Trần Minh Khang
  33. Khoa CNTT LTHĐT 7. ỨNG DỤNG Yêu cầu: Hãy định nghĩa toán tử vào và toán tử ra cho lớp đối tượng CNgay. GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 33 ThS. Nguyễn Tấn Trần Minh Khang
  34. Khoa CNTT LTHĐT 7. ỨNG DỤNG (tiếp) Khai báo lớp 11. class CNgay 12.{ 13. private: 14. int ng; 15. int th; 16. int nm; 17. public: 18. friend istream& operator >> 19. (istream &is,CNgay &x); 20. friend ostream& operator << 21. (ostream &os,CNgay x); 22.}; GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 34 ThS. Nguyễn Tấn Trần Minh Khang
  35. Khoa CNTT LTHĐT 7. ỨNG DỤNG (tiếp) Định nghĩa toán tử vào 11. istream& operator >> (istream &is,CNgay &x) 12.{ 13. cout > x.ng; 15. cout > x.th; 17. cout > x.nm; 19. return is; 20.} GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 35 ThS. Nguyễn Tấn Trần Minh Khang
  36. Khoa CNTT LTHĐT 7. ỨNG DỤNG (tiếp) Định nghĩa toán tử ra 1. ostream& operator << (ostream &os,CNgay x) 2. { 3. os<<x.ng<<"/"<< 4. x.th<<"/"<< 5. x.nm; 6. return os; 7. } GV. Nguyễn Sơn Hoàng Quốc Chương 04 - 36 ThS. Nguyễn Tấn Trần Minh Khang
  37. Khoa CNTT LTHĐT 8. BÀI TẬP VỀ NHÀ Hãy khai báo và định nghĩa hàm toán tử vào và hàm toán tử ra cho các lớp đối tượng sau: 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 04 - 37 ThS. Nguyễn Tấn Trần Minh Khang
  38. Khoa CNTT LTHĐT 10. 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. cin >> a; 5. cout << a; 6. } 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 - 38 ThS. Nguyễn Tấn Trần Minh Khang
  39. Khoa CNTT LTHĐT 9. 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 - 39 ThS. Nguyễn Tấn Trần Minh Khang