Lý thuyết hệ điều hành - Chương 1: Ôn Tập

Tài liệu Lý thuyết hệ điều hành - Chương 1: Ôn Tập: Chương 01 - 1 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 1 Ôn Tập Chương 01 - 2 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. MỤC TIÊU  Ôn lại các khái niệm, các kiến thức lập trình cơ bản  Biến toàn cục  Biến cục bộ  Hàm và biến toàn cục  Tham số và hàm  Trừu tượng hóa dữ liệu Chương 01 - 3 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Bài toán: Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả. 2. BÀI TOÁN Chương 01 - 4 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. BIẾN TOÀN CỤC  Khái niệm:Biến toàn cục là biến được khai báo bên ngoài tất cả các hàm và được hiểu bên trong tất cả các hàm.  Thông thường biến toàn cục được khai báo ở đầu chương trình.  Lưu ý: Biến khai báo bên trong thân hàm main không là biến toàn cục mà là biến cục bộ của hàm main. ...

pdf431 trang | Chia sẻ: Khủng Long | Lượt xem: 847 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Lý thuyết hệ điều hành - Chương 1: Ôn Tập, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Chương 01 - 1 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 1 Ôn Tập Chương 01 - 2 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. MỤC TIÊU  Ôn lại các khái niệm, các kiến thức lập trình cơ bản  Biến toàn cục  Biến cục bộ  Hàm và biến toàn cục  Tham số và hàm  Trừu tượng hóa dữ liệu Chương 01 - 3 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Bài toán: Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả. 2. BÀI TOÁN Chương 01 - 4 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. BIẾN TOÀN CỤC  Khái niệm:Biến toàn cục là biến được khai báo bên ngoài tất cả các hàm và được hiểu bên trong tất cả các hàm.  Thông thường biến toàn cục được khai báo ở đầu chương trình.  Lưu ý: Biến khai báo bên trong thân hàm main không là biến toàn cục mà là biến cục bộ của hàm main. Chương 01 - 5 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 11.#include 12.#include 13.char hoten[30]; 14.int toan; 15.int van; 16.float dtb; 17.void main() 18.{ 19. printf(“Nhap ho ten:”); 20. gets(hoten); 21. printf(“Nhap toan:”); 22. scanf(“%d”,&toan); 23. printf(“Nhap van:”); 24. scanf(“%d”,&van); 25. dtb=(float)(toan+van)/2; 26. printf(“\n Ho ten: %s” , hoten); 27. printf(“\n Toan: %d” , toan); 28. printf(“\n Van: %d” , van); 29. printf(“\n Trung binh:%f”, dtb); 30.} Chương 01 - 6 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. BIẾN CỤC BỘ  Khái niệm: Biến cục bộ là biến đƣợc khai báo và đƣợc hiểu bên trong một phạm vi nào đó của chtrình, ra khỏi phạm vi này biến không còn đƣợc biết đến nữa vì không gian bộ nhớ cấp phát cho biến đƣợc tự động thu hồi.  Thông thường biến cục bộ được khai báo bên trong thân của một hàm hay một khối lệnh.  Lưu ý: Một biến được khai báo bên trong thân hàm main là biến cục bộ của hàm main. Chương 01 - 7 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 11.#include 12.#include 13.void main() 14.{ 15. char hoten[30]; 16. int toan; 17. int van; 18. float dtb; 19. printf(“Nhap ho ten:”); 20. gets(hoten); 21. printf(“Nhap toan:”); 22. scanf(“%d”,&toan); 23. printf(“Nhap van:”); 24. scanf(“%d”,&van); 25. dtb=(float)(toan+van)/2; 26. printf(“\nHo ten:%s”, hoten); 27. printf(“\n Toan: %d” , toan); 28. printf(“\n Van: %d” , van); 29. printf(“\n Trung binh:%f” , dtb); 30.} Chương 01 - 8 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. HÀM VÀ BIẾN TOÀN CỤC  Kiến trúc chương trình C.  Khối khai báo  Khối hàm main  Khối định nghĩa hàm. Chương 01 - 9 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.1 KIẾN TRÚC MỘT CHƢƠNG TRÌNH C ĐƠN GIẢN  Kiến trúc của một chương trình C cơ bản bao gồm 3 khối lệnh chính như sau: khối khai báo, khối hàm main và khối định nghĩa hàm. Ba khối lệnh này được trình bày theo thứ tự của hình vẽ bên dưới. Chương 01 - 10 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.1 KIẾN TRÚC MỘT CHƢƠNG TRÌNH C ĐƠN GIẢN Khối khai báo Khối hàm main Khối định nghĩa hàm 1 2 3 Chương 01 - 11 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.1 KIẾN TRÚC MỘT CHƢƠNG TRÌNH C ĐƠN GIẢN  Khối khai báo: chứa các khai báo hàm, khai báo biến toàn cục, khai báo sử dụng thư viện, khai báo hằng, khai báo kiểu dữ liệu  Khối hàm main: chứa duy nhất hàm main và thân hàm của nó. Trong thân hàm main chứa các lời gọi hàm cần thiết cho chương trình.  Khối định nghĩa hàm: chứa các định nghĩa hàm đã được khai báo trong khối khai báo. Chương 01 - 12 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Bài toán: Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả. 5.2 CHƢƠNG TRÌNH Chương 01 - 13 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.2 CHƢƠNG TRÌNH 1. #include 2. #include 3. char hoten[30]; 4. int toan; 5. int van; 6. float dtb; 7. void Nhap(); 8. void XuLy(); 9. void Xuat(); Chương 01 - 14 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.2 CHƢƠNG TRÌNH 1. void main() 2. { 3. Nhap(); 4. XuLy(); 5. Xuat(); 6. } Chương 01 - 15 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.2 CHƢƠNG TRÌNH 11.void Xuat() 12.{ 13. printf(“Ho ten:%s”, hoten); 14. printf(“Toan: %d”, toan); 15. printf(“Van: %d:“, van); 16. printf(“DTB: %f”, dtb); 17.} 18.void XuLy() 19.{ 20. dtb=(float)(toan + van)/2; 21.} Chương 01 - 16 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5.2 CHƢƠNG TRÌNH 1. void Nhap() 2. { 3. printf(“Nhap ho ten:”); 4. gets(hoten); 5. printf(“Nhap toan:”); 6. scanf(“%d”,&toan); 7. printf(“Nhap van:”); 8. scanf(“%d”,&van); 9. } Chương 01 - 17 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. THAM SỐ VÀ HÀM  Khái niệm: Các thông số đầu vào của một hàm đƣợc gọi là tham số của hàm.  Phân loại tham số: có 2 loại tham số là tham trị và tham biến.  Tham trị: Không đổi.  Tham biến: Thay đổi.  Cấp phát bộ nhớ:  Tham trị: Cấp phát.  Tham biến: Không cấp phát bộ nhớ khi hàm được gọi thực hiện mà sử dụng bộ nhớ của đối số tương ứng. Chương 01 - 18 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. THAM SỐ VÀ HÀM 1. #include 2. #include 3. void Nhap(char [],int&,int &); 4. void XuLy(int, int, float &); 5. void Xuat(char[],int,int,float); Chương 01 - 19 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. THAM SỐ VÀ HÀM 1. void main() 2. { 3. char ht[30]; 4. int t,v; 5. float tb; 6. Nhap(ht,t,v); 7. Xuly(t,v,tb); 8. Xuat(ht,t,v,tb); 9. } Chương 01 - 20 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. THAM SỐ VÀ HÀM (tiếp) 11.void Xuat(char hoten[],int toan,int van,float dtb) 12.{ 13. printf(“Ho ten:%s”,hoten); 14. printf(“Toan: %d”,toan); 15. printf(“Van: %d”,van); 16. printf(“DTB: %f”,dtb); 17.} 18.void XuLy(int toan, int van, float&dtb) 19.{ 20. dtb=(float)(toan + van)/2; 21.} Chương 01 - 21 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. THAM SỐ VÀ HÀM (tiếp) 1. void Nhap(char hoten[30], int &toan, int &van) 2. { 3. printf(“Nhap ho ten:”); 4. gets(hoten); 5. printf(“Nhap toan:”); 6. scanf(“%d”,&toan); 7. printf(“Nhap van:”); 8. scanf(“%d”,&van); 9. } Chương 01 - 22 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TRỪU TƢỢNG HÓA DỮ LIỆU  Khái niệm: Trừu tượng hóa dữ liệu là một phương pháp tích hợp các kiểu dữ liệu đơn, các kiểu dữ liệu có sẵn nhằm mô tả, biểu diễn một khái niệm hay một đối tượng trong thế giới thực.  Cú pháp: 1. struct KieuDuLieu 2. { 3. Thành phần 1; 4. Thành phần 2; 5. 6. }; 7. typedef struct KieuDuLieu KIEUDULIEU; Chương 01 - 23 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TRỪU TƢỢNG HÓA DỮ LIỆU (tiếp) 11.#include 12.#include 13.struct HocSinh 14.{ 15. char hoten[31]; 16. int toan; 17. int van; 18. float dtb; 19.}; 20.typedef struct HocSinh HOCSINH; 21.void Nhap(HOCSINH &); 22.void Xuat(HOCSINH); 23.void XuLy(HOCSINH&); Chương 01 - 24 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TRỪU TƢỢNG HÓA DỮ LIỆU (tiếp) 1. void Nhap(HOCSINH &); 2. void Xuat(HOCSINH); 3. void XuLy(HOCSINH&); 4. void main() 5. { 6. HOCSINH hs; 7. Nhap(hs); 8. XuLy(hs); 9. Xuat(hs); 10.} Chương 01 - 25 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TRỪU TƢỢNG HÓA DỮ LIỆU (tiếp) 1. void Xuat(HOCSINH x) 2. { 3. printf(“Ho ten:%s”,x.hoten); 4. printf(“Toan: %d”,x.toan); 5. printf(“Van: %d”,x.van); 6. printf(“DTB: %f”,x.dtb); 7. } 8. void XuLy(HOCSINH &x) 9. { 10. x.dtb=(float)(x.toan+x.van)/2; 11.} Chương 01 - 26 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TRỪU TƢỢNG HÓA DỮ LIỆU (tiếp) 1. void Nhap(HOCSINH&x) 2. { 3. printf(“Nhap ho ten:”); 4. gets(x.hoten); 5. printf(“Nhap toan:”); 6. scanf(“%d”,&x.toan); 7. printf(“Nhap van:”); 8. scanf(“%d”,&x.van); 9. } Chương 01 - 27 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 8. ỨNG DỤNG  8.1 Ứng dụng 1: Viết chƣơng trình nhập vào một phân số. Rút gọn phân số đó và xuất kết quả. Chương 01 - 28 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 8. ỨNG DỤNG  8.2 Ứng dụng 2: Viết chƣơng trình nhập vào tọa độ 2 điểm trong mặt phẳng Oxy. Tính khoảng cách giữa chúng và xuất kết quả Chương 01 - 29 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  Bài 1: Viết chương trình nhập vào một phân số. Hãy cho biết phân số đó là phân số âm hay dương hay bằng không.  Bài 2: Viết chương trình nhập tọa độ hai điểm trong không gian. Tính khoảng cách giữa chúng và xuất kết quả. Chương 01 - 30 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  Bài 3: Viết chương trình nhập vào 2 phân số. Tìm phân số lớn nhất và xuất kết quả.  Bài 4: Viết chương trình nhập vào hai phân số. Tính tổng, hiệu, tích, thương giữa chúng và xuất kết quả. Chương 01 - 31 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  Bài 5: Viết chương trình nhập vào 2 số phức. Tính tổng, hiệu, tích và xuất kết quả.  Bài 6: Viết chương trình nhập vào một ngày. Tìm ngày kế tiếp và xuất kết quả. Chương 01 - 32 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  Bài 7: Viết chương trình nhập vào một ngày. Tìm ngày hôm qua và xuất kết quả.  Bài 8: Viết chương trình nhập toạ độ 3 đỉnh A,B,C của 1 tam giác trong mặt phẳng Oxy. Tính chu vi, diện tích và tìm tọa độ trọng tâm. Chương 01 - 33 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  Bài 9: Viết chương trình nhập tọa tâm và bán kính của một đường tròn. Tính diện tích và chu vi của đường tròn. Chương 01 - 34 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 9. BÀI TẬP  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_BT01.  Trong workspace có 9 project tương ứng với từng bài tập.  Nộp bài tập lên hệ thống Moodle theo qui định. LTHĐTKhoa CNTT Chương 02 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 2 CÁC PHƢƠNG PHÁP LẬP TRÌNH LTHĐTKhoa CNTT Chương 02 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. MỤC TIÊU Trong chương này các sinh viên sẽ có một cái nhìn sơ bộ về các phương pháp lập trình khác nhau:  Phương pháp lập trình hướng lệnh.  Phương pháp lập trình hướng thủ tục, hàm.  Phương pháp lập trình hướng đơn thể.  Phương pháp lập trình hướng đối tượng (Tên Môn Học). LTHĐTKhoa CNTT Chương 02 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG LỆNH  Khái niệm: Trong phương pháp này người ta xem chương trình là tập hợp các lệnh. Khi đó việc viết chương trình là xác định xem chương trình gồm những lệnh nào, thứ tự thực hiện của các lệnh ra sao. LTHĐTKhoa CNTT Chương 02 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG LỆNH  Hình vẽ chương trình lệnh LTHĐTKhoa CNTT Chương 02 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG THỦ TỤC, HÀM  Khái niệm: Trong phương pháp này người ta xem chương trình là một hệ thống các thủ tục và hàm. Trong đó, mỗi thủ tục và hàm là một dãy các lệnh được sắp thứ tự. Khi đó, việc viết chương trình là xác định xem chương trình gồm các thủ tục và hàm nào, mối quan hệ giữa chúng ra sao? LTHĐTKhoa CNTT Chương 02 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG THỦ TỤC, HÀM  Hình vẽ chương trình Lệnh Hàm void main() { } Khối khai báo Thủ tục LTHĐTKhoa CNTT Chương 02 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐƠN THỂ  Khái niệm: Trong phương pháp này người ta xem chương trình là 1 hệ thống các đơn thể, mỗi một đơn thể là 1 hệ thống các thủ tục và hàm. Khi đó, việc viết chương trình là xác định xem chương trình gồm những đơn thể nào? Đơn thể nào đã có sẵn, đơn thể nào phải đi mua và đơn thể nào phải tự viết. LTHĐTKhoa CNTT Chương 02 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐƠN THỂ  Phân loại đơn thể: Người ta chia đơn thể thành 2 loại là đơn thể hướng dữ liệu và đơn thể hướng chức năng. LTHĐTKhoa CNTT Chương 02 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐƠN THỂ  Phân loại đơn thể  Đơn thể hướng dữ liệu: là đơn thể được thiết kế và xây dựng để phục vụ cho một kiểu dữ liệu nào đó bên trong chương trình.  Ví dụ: Thư viện string.h LTHĐTKhoa CNTT Chương 02 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐƠN THỂ  Phân loại đơn thể  Đơn thể hướng chức năng: là đơn thể được thiết kế và xây dựng để phục vụ cho một nhóm chức năng nào đó bên trong chương trình.  Ví dụ: Thư viện math.h LTHĐTKhoa CNTT Chương 02 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐƠN THỂ void main() { } Khối khai báo Đơn thể 1 Đơn thể chính chương trình Đơn thể 2 Đơn thể n LTHĐTKhoa CNTT Chương 02 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG  Khái niệm: Trong phương pháp này người ta xem chương trình là một hệ thống các đối tượng. Mỗi một đối tượng là sự bao bọc bên trong nó 2 thành phần: LTHĐTKhoa CNTT Chương 02 - 13 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG  Khái niệm  Thành phần dữ liệu: là các thông tin về chính đối tượng. Trong một số tài liệu, sách vở thành phần này còn được gọi là thành phần thuộc tính, thành phần thông tin.  Thành phần hành động: là các khả năng mà đối tượng có thể thực hiện. Thành phần này còn có các tên gọi như sau: phƣơng thức, hàm thành phần, hành vi. LTHĐTKhoa CNTT Chương 02 - 14 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG  Mỗi một đối tượng sẽ được cài đặt bên trong chương trình dưới dạng đơn thể chứa dữ liệu. Thêm vào đó tính chất kế thừa cho phép chúng ta xây dựng đối tượng mới dựa trên cơ sở đối tượng đã có. LTHĐTKhoa CNTT Chương 03 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 3 LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG VỚI C++ LTHĐTKhoa CNTT Chương 03 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 0. ĐẶT VẤN ĐỀ  Viết chương trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả. LTHĐTKhoa CNTT Chương 03 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. LỚP ĐỐI TƢỢNG (class)  Khái niệm: Lớp đối tượng tượng hiểu một cách đơn giản nhất là sự tích hợp của hai thành phần: Thành phần dữ liệu và Thành phần xử lý.  Cú pháp khai báo lớp 1. class CTenLop 2. { 3. // Thành phần dữ liệu. 4. // Thành phần xử lý 5. }; LTHĐTKhoa CNTT Chương 03 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. LỚP ĐỐI TƢỢNG (class)  Ví dụ: Hãy khai báo lớp cho bài toán được nêu ra trong phần đặt vấn đề. 11.struct HocSinh 12.{ 13. char hoten[31]; 14. int toan; 15. int van; 16. float dtb; 17.}; 18.typedef struct hocsinh HOCSINH; 19.void Nhap(HOCSINH&); 20.void Xuat(HOCSINH); 21.void XuLy(HOCSINH &); Thành phần dữ liệu Thành phần xử lý LTHĐTKhoa CNTT Chương 03 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. LỚP ĐỐI TƢỢNG (class) 11.class CHocSinh 12.{ 13. private: 14. char hoten[31]; 15. int toan; 16. int van; 17. float dtb; 18. public: 19. void Nhap(); 20. void Xuat(); 21. void XuLy(); 22.}; LTHĐTKhoa CNTT Chương 03 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. ĐỐI TƢỢNG (object)  Khái niệm: Đối tƣợng là một sự thể hiện của một lớp. Trong một lớp có thể có nhiều sự thể hiện khác nhau. Nói một cách khác: có thể có nhiều đối tƣợng cùng thuộc về một lớp.  Cú pháp khai báo đối tượng. 1. CTenLop ; LTHĐTKhoa CNTT Chương 03 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. ĐỐI TƢỢNG (object)  Ví dụ 1: CHocSinh x; Trong ví dụ trên ta nói x là một đối tượng thuộc về lớp đối tượng CHocSinh.  Ví dụ 2: CHocSinh a,b; CHocSinh y; Trong ví dụ trên ta nói a,b,y là ba đối tượng thuộc về lớp đối tượng CHocSinh. Nói một cách khác: Lớp đối tượng CHocSinh có ba sự thể hiện khác nhau. LTHĐTKhoa CNTT Chương 03 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG THỨC (method)  Khái niệm: Phương thức là khả năng mà đối tượng thuộc về lớp có thể thực hiện.  Cú pháp định nghĩa phương thức: 1. KDL CTenLop::PhuongThuc () 2. { 3. // Thân Phương Thúc 4. } LTHĐTKhoa CNTT Chương 03 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG THỨC (method)  Ví dụ 1: Định nghĩa phương thức nhập của lớp CHocSinh. 1. void CHocSinh::Nhap() 2. { 3. printf(“Nhap ho ten:”); 4. gets(hoten); 5. printf(“Nhap toan:”); 6. scanf(“%d”, &toan); 7. printf(“Nhap van:”); 8. scanf(“%d”, &van); 9. } LTHĐTKhoa CNTT Chương 03 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG THỨC (method)  Ví dụ 2: Định nghĩa phương thức XuLy của lớp CHocSinh. 1. void CHocSinh::XuLy() 2. { 3. dtb=(float)(toan+van)/2; 4. } LTHĐTKhoa CNTT Chương 03 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. PHƢƠNG THỨC (method)  Ví dụ 3: Định nghĩa phương thức Xuat của lớp CHocSinh. 1. void CHocSinh::Xuat() 2. { 3. printf(“\nHo ten:%s”, hoten); 4. printf(“\nToan: %d”,toan); 5. printf(“\nVan: %d”,van); 6. printf(“\nDTB: %f”,dtb); 7. } LTHĐTKhoa CNTT Chương 03 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Khái niệm: Đối tượng hành động là đối tượng gọi thực hiện phương thức mà lớp đối tượng nó thuộc về cung cấp.  Cú pháp 1. TenDoiTuong.PhuongThuc()  Ví dụ 1: 1. CHocSinh hs; 2. hs.Nhap(); LTHĐTKhoa CNTT Chương 03 - 13 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Ví dụ 1: 1. CHocSinh hs; 2. hs.Nhap();  Trong câu lệnh thứ hai của đoạn chương trình trên ta nói: đối tƣợng hs gọi thực hiện phƣơng thức Nhập. LTHĐTKhoa CNTT Chương 03 - 14 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Ví dụ 2: 1. CHocSinh a,b,c; 2. a.Nhap(); 3. b.Nhap(); 4. c.Nhap();  Trong câu lệnh thứ hai của đoạn chương trình trên ta nói: đối tƣợng a gọi thực hiện phƣơng thức Nhập.  v..v.. LTHĐTKhoa CNTT Chương 03 - 15 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang hoten toan van dtb hoten toan van dtb hoten toan van dtb void Nhap() void Xuat() void XuLy() a b c 1. CHocSinh a,b,c; 2. a.Nhap(); 3. b.Nhap(); 4. c.Nhap(); LTHĐTKhoa CNTT Chương 03 - 16 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Ví dụ 1: Định nghĩa phương thức nhập của lớp CHocSinh. 1. void CHocSinh::Nhap() 2. { 3. printf(“Nhap ho ten:”); 4. gets(hoten); 5. printf(“Nhap toan:”); 6. scanf(“%d”, &toan); 7. printf(“Nhap van:”); 8. scanf(“%d”, &van); 9. } LTHĐTKhoa CNTT Chương 03 - 17 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Ví dụ 2: Định nghĩa phương thức XuLy của lớp CHocSinh. 1. void CHocSinh::XuLy() 2. { 3. dtb=(float)(toan+van)/2; 4. } LTHĐTKhoa CNTT Chương 03 - 18 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. ĐỐI TƢỢNG HÀNH ĐỘNG  Ví dụ 3: Định nghĩa phương thức Xuat của lớp CHocSinh. 1. void CHocSinh::Xuat() 2. { 3. printf(“\nHo ten:%s”, hoten); 4. printf(“\nToan: %d”,toan); 5. printf(“\nVan: %d”,van); 6. printf(“\nDTB: %f”,dtb); 7. } LTHĐTKhoa CNTT Chương 03 - 19 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. CHƢƠNG TRÌNH ĐẦU TIÊN  Bài toán: Viết chƣơng trình nhập họ tên, điểm toán, điểm văn của một học sinh. Tính điểm trung bình và xuất kết quả.  Chƣơng trình LTHĐTKhoa CNTT Chương 03 - 20 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. CHƢƠNG TRÌNH ĐẦU TIÊN 11.#include 12.#include 13.class CHocSinh 14.{ 15. private: 16. char hoten[31]; 17. int toan; 18. int van; 19. float dtb; 20. public: 21. void Nhap(); 22. void Xuat(); 23. void XuLy(); 24.}; LTHĐTKhoa CNTT Chương 03 - 21 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. CHƢƠNG TRÌNH ĐẦU TIÊN 11.void main() 12.{ 13. CHocSinh hs; 14. hs.Nhap(); 15. hs.XuLy(); 16. hs.Xuat(); 17.} 18.void CHocSinh::Xuat() 19.{ 20. printf(“\nHo ten:%s”, hoten); 21. printf(“\nToan: %d”,toan); 22. printf(“\nVan: %d”,van); 23. printf(“\nDTB: %f”,dtb); 24.} LTHĐTKhoa CNTT Chương 03 - 22 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. CHƢƠNG TRÌNH ĐẦU TIÊN 11. void CHocSinh::Nhap() 12. { 13. printf(“Nhap ho ten:”); 14. gets(hoten); 15. printf(“Nhap toan:”); 16. scanf(“%d”, &toan); 17. printf(“Nhap van:”); 18. scanf(“%d”, &van); 19. } 20. void CHocSinh::XuLy() 21. { 22. dtb=(float)(toan+van)/2; 23. } LTHĐTKhoa CNTT Chương 03 - 23 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG  6.1 Ứng dụng 1: Viết chƣơng trình nhập vào một phân số. Rút gọn phân số đó và xuất kết quả.  Chƣơng trình LTHĐTKhoa CNTT Chương 03 - 24 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.#include 12.#include 13.class CPhanSo 14.{ 15. private: 16. int tu; 17. int mau; 18. public: 19. void Nhap(); 20. void Xuat(); 21. void RutGon(); 22.}; LTHĐTKhoa CNTT Chương 03 - 25 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.void main() 12.{ 13. CPhanSo ps; 14. ps.Nhap(); 15. ps.RutGon(); 16. ps.Xuat(); 17.} 18.void CPhanSo::Nhap() 19.{ 20. printf(“Nhap tu: ”); 21. scanf(“%d”,&tu); 22. printf(“Nhap mau: ”); 23. scanf(“%d”,&mau); 24.} LTHĐTKhoa CNTT Chương 03 - 26 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. void CPhanSo::RutGon() 12. { 13. 14. 15. 16. 17. 18. 19. } 20. void CPhanSo::Xuat() 21. { 22. printf(“%d/%d”,tu,mau); 23. } LTHĐTKhoa CNTT Chương 03 - 27 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG  6.2 Ứng dụng 2: Viết chƣơng trình nhập vào tọa độ 2 điểm trong mặt phẳng Oxy. Tính khoảng cách giữa chúng và xuất kết quả.  Chƣơng trình LTHĐTKhoa CNTT Chương 03 - 28 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.#include 12.#include 13.#include 14.class CDiem 15.{ 16. private: 17. float x; 18. float y; 19. public: 20. void Nhap(); 21. void Xuat(); 22. float KhoangCach(CDiem); 23.}; LTHĐTKhoa CNTT Chương 03 - 29 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.void main() 12.{ 13. CDiem A,B; 14. A.Nhap(); 15. B.Nhap(); 16. float kq = A.KhoangCach(B); 17. A.Xuat(); 18. B.Xuat(); 19. printf(“\n Khoang cach: %f”, kq); 20.} LTHĐTKhoa CNTT Chương 03 - 30 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. void CDiem::Nhap() 12. { 13. float temp; 14. printf(“Nhap x:”); 15. scanf(“%f”,&temp); 16. x = temp; 17. printf(“Nhap y:”); 18. scanf(“%f”,&temp); 19. y = temp; 20. } 21. void CDiem::Xuat() 22. { 23. printf(“(%f,%f)”,x,y); 24. } LTHĐTKhoa CNTT Chương 03 - 31 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. float CDiem::KhoangCach(CDiem P) 12. { 13. return sqrt((x-P.x)*(x-P.x) 14. +(y-P.y)*(y-P.y)); 15. } LTHĐTKhoa CNTT Chương 03 - 32 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.void main() 12.{ 13. CDiem A,B; 14. A.Nhap(); 15. B.Nhap(); 16. float kq = A.KhoangCach(B); 17. A.Xuat(); 18. B.Xuat(); 19. printf(“\n Khoang cach: %f”, kq); 20.} LTHĐTKhoa CNTT Chương 03 - 33 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11.#include 12.#include 13.#include 14.class CDiem 15.{ 16. private: 17. float x; 18. float y; 19. public: 20. void Nhap(); 21. void Xuat(); 22. float KhoangCach(CDiem); 23.}; LTHĐTKhoa CNTT Chương 03 - 34 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. float CDiem::KhoangCach(CDiem P) 12. { 13. return sqrt((x-P.x)*(x-P.x) 14. +(y-P.y)*(y-P.y)); 15. } LTHĐTKhoa CNTT Chương 03 - 35 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. float CDiem::KhoangCach(CDiem P) 12. { 13. return sqrt((x-P.x)*(x-P.x) 14. +(y-P.y)*(y-P.y)); 15. } LTHĐTKhoa CNTT Chương 03 - 36 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. float CDiem::KhoangCach(CDiem P) 12. { 13. return sqrt((x-P.x)*(x-P.x) 14. +(y-P.y)*(y-P.y)); 15. } LTHĐTKhoa CNTT Chương 03 - 37 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG 11. float CDiem::KhoangCach(CDiem P) 12. { 13. return sqrt((x-P.x)*(x-P.x) 14. +(y-P.y)*(y-P.y)); 15. } float kq = A.KhoangCach(B); float kq = B.KhoangCach(A); LTHĐTKhoa CNTT Chương 03 - 38 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. BÀI TẬP VỀ NHÀ Làm tất cả các bài tập của chương 01 bằng phương pháp lập trình hướng đối tượng (9 bài). LTHĐTKhoa CNTT Chương 04 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 4 SƠ LƢỢC THƢ VIỆN IOSTREAM.H LTHĐTKhoa CNTT Chương 04 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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<<“Nhap mot so nguyen: ”; 3. cin>>a; 4. cout<<“So nguyen vua nhap:”<<a; LTHĐTKhoa CNTT Chương 04 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 LTHĐTKhoa CNTT Chương 04 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 (tiếp)  Định nghĩa hàm 11.void Nhap(PHANSO &x) 12.{ 13. cout<<“Nhap tu:”; 14. cin>>x.tu; 15. cout<<“Nhap mau:”; 16. cin>>x.mau; 17.} 18.void Xuat(PHANSO x) 19.{ 20. cout<<x.tu<<“/”<<x.mau; 21.} LTHĐTKhoa CNTT Chương 04 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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; 3. cout<<a;  Lưu ý  Ký hiệu >> được gọi là toán tử vào.  Ký hiệu << được gọi là toán tử ra. Làm sao? LTHĐTKhoa CNTT Chương 04 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.  Ngoài ra, 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. LTHĐTKhoa CNTT Chương 04 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 13 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 14 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 15 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 16 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 17 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 18 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 << “Nhap tu”; 4. is >> x.tu; 5. cout << “Nhap mau”; 6. is >> x.mau; 7. return is; 8. } Tại sao phải trả về một đối tượng thuộc lớp istream? LTHĐTKhoa CNTT Chương 04 - 19 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 20 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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? LTHĐTKhoa CNTT Chương 04 - 21 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 04 - 22 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 <<a ;  Trong câu lệnh thứ hai 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à 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. LTHĐTKhoa CNTT Chương 04 - 23 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 <<a <<b <<c;  Trong câu lệnh thứ hai 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.  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. LTHĐTKhoa CNTT Chương 04 - 24 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. LTHĐTKhoa CNTT Chương 04 - 25 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.}; LTHĐTKhoa CNTT Chương 04 - 26 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. ỨNG DỤNG (tiếp)  Định nghĩa toán tử vào 11.istream& operator >> (istream &is,CNgay &x) 12.{ 13. cout << “Nhap ngay:”; 14. is >> x.ng; 15. cout << “Nhap thang:”; 16. is >> x.th; 17. cout << “Nhap nam:”; 18. is >> x.nm; 19. return is; 20.} LTHĐTKhoa CNTT Chương 04 - 27 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. } LTHĐTKhoa CNTT Chương 04 - 28 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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) LTHĐTKhoa CNTT Chương 05 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chƣơng 5 PHƢƠNG THỨC THIẾT LẬP, PHƢƠNG THỨC PHÁ HỦY LTHĐTKhoa CNTT Chương 05 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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ì? LTHĐTKhoa CNTT Chương 05 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. LTHĐTKhoa CNTT Chương 05 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.  Trong một quá trình sống của đối tượng thì chỉ có 1 lần duy nhất một phương thức thiết lập được gọi thực hiện mà thôi đó là khi đối tượng ra đời.  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. LTHĐTKhoa CNTT Chương 05 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 ban đầu cho đối tượng thuộc về lớp bằng bằng những giá trị mặc định (do người lập trình quyết định). LTHĐTKhoa CNTT Chương 05 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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 để tao 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 ko 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. LTHĐTKhoa CNTT Chương 05 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.}; LTHĐTKhoa CNTT Chương 05 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. } LTHĐTKhoa CNTT Chương 05 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. } LTHĐTKhoa CNTT Chương 05 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. } LTHĐTKhoa CNTT Chương 05 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. LTHĐTKhoa CNTT Chương 05 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.  Phương thức.  Phương thức.  Phương thức.  Phương thức.  Phương thức. LTHĐTKhoa CNTT Chương 05 - 13 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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ừ đối tượng này sang đối tượng khác. LTHĐTKhoa CNTT Chương 05 - 14 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.}; LTHĐTKhoa CNTT Chương 05 - 15 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.} LTHĐTKhoa CNTT Chương 05 - 16 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.} LTHĐTKhoa CNTT Chương 05 - 17 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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.} LTHĐTKhoa CNTT Chương 05 - 18 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. LTHĐTKhoa CNTT Chương 05 - 19 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2.1 CÁC ĐẶC ĐIỂM CỦA PHƢƠNG THỨC PHÁ HỦY  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.  Trong một quá trình sống của đối tượng có và chỉ có một lần phương thức phá hủy được gọi thực hiện mà thôi. LTHĐTKhoa CNTT Chương 05 - 20 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. }; LTHĐTKhoa CNTT Chương 05 - 21 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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. } LTHĐTKhoa CNTT Chương 05 - 22 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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; LTHĐTKhoa CNTT Chương 05 - 23 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 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: 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) LTHĐTKhoa CNTT Chương 06 - 1GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang Chương 6 TOÁN TỬ GÁN (operator=) LTHĐTKhoa CNTT Chương 06 - 2GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 0. MỤC TIÊU  Hiểu được phương thức toán tử gán là gì?  Hiểu được vai trò của toán tử gán trong lập trình hướng đối tượng LTHĐTKhoa CNTT Chương 06 - 3GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 1. KHÁI NIỆM − Toán tử gán trong lập trình C được sử dụng để gán giá trị của biến này cho biến khác. − Mở rộng cho C++ và các ngôn ngữ lập trình hướng đối tượng khác ta có thể nói như sau: Toán tử gán được sử dụng để gán thành phần dữ liệu của đối tượng này cho đối tượng khác. LTHĐTKhoa CNTT Chương 06 - 4GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 2. ĐẶT VẤN ĐỀ − Hãy khai báo và định nghĩa các phương thức cần thiết để các câu lệnh sau có thể thực hiện − Đoạn chương trình CHocSinh a,b; a.Nhap(); b=a; b.Xuat(); LTHĐTKhoa CNTT Chương 06 - 5GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Đoạn chương trình CHocSinh a,b; a.Nhap(); b=a; b.Xuat(); − Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHocSinh LTHĐTKhoa CNTT Chương 06 - 6GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHocSinh − Khai báo lớp class CHocSinh { private: char hoten[31]; int toan; int van; float dtb; public: CHocSinh operator= (CHocSinh &); }; LTHĐTKhoa CNTT Chương 06 - 7GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHocSinh − Khai báo lớp class CHocSinh { private: char hoten[31]; int toan; int van; float dtb; public: CHocSinh operator= (CHocSinh &); }; LTHĐTKhoa CNTT Chương 06 - 8GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHocSinh − Khai báo lớp class CHocSinh { private: char hoten[31]; int toan; int van; float dtb; public: CHocSinh operator= (CHocSinh &); }; LTHĐTKhoa CNTT Chương 06 - 9GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHocSinh − Khai báo lớp class CHocSinh { private: char hoten[31]; int toan; int van; float dtb; public: CHocSinh operator= (CHocSinh &); }; LTHĐTKhoa CNTT Chương 06 - 10GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 3. GIẢI QUYẾT VẤN ĐỀ − Định nghĩa phương thức toán tử gán CHocSinh CHocSinh::operator= (CHocSinh&x) { strcpy(hoten,x.hoten); toan = x.toan; van = x.van; dtb = x.dtb; return *this; } LTHĐTKhoa CNTT Chương 06 - 11GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 4. CÁC GHI CHÚ QUAN TRỌNG − Toán tử gán được cài đặt bên trong lớp CHocSinh như là một phương thức của lớp. − Miền giá trị của một biến con trỏ là địa chỉ ô nhớ. − Miền giá trị của một con trỏ đối tượng là địa chỉ ô nhớ. − Bên trong thân của một phương thức, this là một con trỏ đối tượng thuộc về lớp mà phương thức đó thuộc về. LTHĐTKhoa CNTT Chương 06 - 12GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 4. CÁC GHI CHÚ QUAN TRỌNG − Bên trong thân của một phương thức, this là một con trỏ đối tượng thuộc về lớp mà phương thức đó thuộc về. + Ví dụ 01: Bên trong thân phương thức nhap của lớp CPhanSo, this là con trỏ đối tượng thuộc về lớp CPhanSo. + Ví dụ 02: Bên trong thân phương thức xuất của lớp CDiem, this là con trỏ đối tượng thuộc về lớp CDiem. + Ví dụ 03: Bên trong thân phương thức operator = của lớp CHocSinh, this là con trỏ đối tượng thuộc về lớp CHocSinh. LTHĐTKhoa CNTT Chương 06 - 13GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 4. CÁC GHI CHÚ QUAN TRỌNG − Bên trong thân phương thức của một lớp, this là một con trỏ đối tượng giữ địa chỉ của đối tượng đang gọi thực hiện phương thức. − Bên trong thân phương thức của một lớp, this là một con trỏ đối tượng giữ địa chỉ của đối tượng đang gọi thực hiện phương thức. Hơn nữa *this chính là đối tượng đang gọi thực hiện phương thức. LTHĐTKhoa CNTT Chương 06 - 14GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 5. HƯỚNG DẪN SỬ DỤNG CHocSinh CHocSinh::operator= (CHocSinh&x) { strcpy(hoten,x.hoten); toan = x.toan; van = x.van; dtb = x.dtb; return *this; } − Hướng dẫn sử dụng 01: 1. CHocSinh a,b; 2. a.nhap(); 3. b = a; − Trong câu lệnh thứ 3 của đoạn chương trình trên ta nói: đối tượng b gọi thực hiện phương thức toán tử gán với tham số là đối tượng a. LTHĐTKhoa CNTT Chương 06 - 15GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 5. HƯỚNG DẪN SỬ DỤNG − Định nghĩa phương thức toán tử gán CHocSinh CHocSinh::operator= (CHocSinh&x) { strcpy(hoten,x.hoten); toan = x.toan; van = x.van; dtb = x.dtb; return *this; } LTHĐTKhoa CNTT Chương 06 - 16GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 5. HƯỚNG DẪN SỬ DỤNG CHocSinh CHocSinh::operator= (CHocSinh&x) { strcpy(hoten,x.hoten); toan = x.toan; van = x.van; dtb = x.dtb; return *this; } − Hướng dẫn sử dụng 02: 1. CHocSinh a,b,c,d,e; 2. e.Nhap(); 3. a = b = c = d = e; − Trong câu lệnh thứ 3 của đoạn chương trình trên ta nói: nói không nổi. LTHĐTKhoa CNTT Chương 06 - 17GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 5. HƯỚNG DẪN SỬ DỤNG − Định nghĩa phương thức toán tử gán CHocSinh CHocSinh::operator= (CHocSinh&x) { strcpy(hoten,x.hoten); toan = x.toan; van = x.van; dtb = x.dtb; return *this; } LTHĐTKhoa CNTT Chương 06 - 18GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG − Hãy khai báo và định nghĩa phương thức toán tử gán cho lớp đối tượng CHonSo − Khai báo lớp class CHonSo { private: int nguyen; int tu; int mau; public: CHonSo operator=(CHonSo &); }; LTHĐTKhoa CNTT Chương 06 - 19GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 6. ỨNG DỤNG − Định nghĩa phương thức toán tử gán CHonSo CHonSo::operator = (CHonSo &x) { nguyen = x.nguyen; tu = x.tu; mau = x.mau; return *this; } LTHĐTKhoa CNTT Chương 06 - 20GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 7. BÀI TẬP VỀ NHÀ  Hãy khai báo và định nghĩa phương thức toán tử gán 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) LTHĐTKhoa CNTT Chương 06 - 21GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 8. 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, b; 4. a.Nhap(); 5. b = a; 6. a.Xuat(); 7. b.Xuat(); 8. } − Bài 2 đến Bài 12: Viết tương tự cho các lớp đối tượng còn lại. LTHĐTKhoa CNTT Chương 06 - 22GV. Nguy ễn Sơn Hoàng QuốcThS. Nguyễn Tấn Trần Minh Khang 8. 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_BT06. + 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. LTHĐTKhoa CNTT Chương 07 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chương 7 TOÁN TỬ SỐ HỌC LTHĐTKhoa CNTT Chương 07 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 0. MỤC TIÊU  Hiểu được các toán tử số học là gì?  Hiểu được vai trò của toán tử số học trong C++ Click to see Figure 1-2 LTHĐTKhoa CNTT Chương 07 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. BÀI TOÁN DẪN NHẬP  Bài toán: Viết chương trình nhập vào hai phân số. Tính tổng giữa chúng và xuất kết quả băng phương pháp lập trình hướng đối tương.  Chương trình #include #include class CPhanSo { private: int tu; int mau; public: void Nhap(); void Xuat(); CPhanSo Tong(CPhanSo); }; LTHĐTKhoa CNTT Chương 07 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. BÀI TOÁN DẪN NHẬP void main() { CPhanSo a,b,kq; a.Nhap(); b.Nhap(); kq = a.Tong(b); printf(“Tong la:”); kq.Xuat(); } LTHĐTKhoa CNTT Chương 07 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. BÀI TOÁN DẪN NHẬP void CPhanSo::Nhap() { printf(“Nhap tu:”); scanf(“%d”,&tu); printf(“Nhap mau:”); scanf(“%d”,&mau); } void CPhanSo::Xuat() { printf(“%d/%d”,tu,mau); } LTHĐTKhoa CNTT Chương 07 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. BÀI TOÁN DẪN NHẬP CPhanSo CPhanSo::Tong(CPhanSo x) { CPhanSo temp; temp.tu= tu*x.mau + mau*x.tu; temp.mau= mau*x.mau; return temp; } a c ad bc b d bd    x y temp kq = a.Tong(b); LTHĐTKhoa CNTT Chương 07 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. KHÁI NIỆM  Trong ngôn ngữ lập trình C có các toán tử số học như sau:  Toán tử cộng (operator +)  Toán tử trừ (operator -)  Toán tử nhân (operator *)  Toán tử chia (operator /)  Toán tử mod (operator %)  Toán tử cộng bằng (operator +=)  Toán tử trừ bằng (operator -=)  Toán tử nhân bằng (operator *=)  Toán tử chia bằng (operator /=)  Toán tử mod bằng (operator %=)  Toán tử tăng một (operator ++)  Toán tử giảm một (operator --) LTHĐTKhoa CNTT Chương 07 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. ĐẶT VẤN ĐỀ  Hãy khai báo và định nghĩa các phương thức và toán tử cần thiết để các câu lệnh sau có thể thực hiện.  Các câu lệnh 11.CPhanSo a,b,kq; 12.cin>>a>>b; 13.kq = a + b; 14.cout<<“Tong:”<<kq; 15.kq = a – b; 16.cout<<“Hieu:”<<kq; 17.kq = a * b; 18.cout<<“Tich:”<<kq; 19.kq = a / b; 20.cout<<“Thuong:”<<kq; LTHĐTKhoa CNTT Chương 07 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Để giải quyết vấn đề trên ta phải khai báo và định nghĩa các toán tử số học cho lớp đối tượng CPhanSo.  Khai báo lớp class CPhanSo { private: int tu; int mau; public: CPhanSo Tong(CPhanSo); CPhanSo operator+(CPhanSo); CPhanSo operator-(CPhanSo); CPhanSo operator*(CPhanSo); CPhanSo operator/(CPhanSo); }; LTHĐTKhoa CNTT Chương 07 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ CPhanSo CPhanSo::operator+ (CPhanSo x) { CPhanSo temp; temp.tu = tu*x.mau+mau*x.tu; temp.mau = mau*x.mau; return temp; } CPhanSo CPhanSo::operator- (CPhanSo x) { CPhanSo temp; temp.tu = tu*x.mau-mau*x.tu; temp.mau = mau*x.mau; return temp; } LTHĐTKhoa CNTT Chương 07 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ CPhanSo CPhanSo::operator* (CPhanSo x) { CPhanSo temp; temp.tu = tu*x.tu; temp.mau = mau*x.mau; return temp; } CPhanSo CPhanSo::operator/ (CPhanSo x) { CPhanSo temp; temp.tu = tu*x.mau; temp.mau = mau*x.tu; return temp; } LTHĐTKhoa CNTT Chương 07 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. BÀI TẬP VỀ NHÀ  Bài 01: Hãy định nghĩa các toán tử +,-,*,/,+=,-=,*=,/=,++,-- cho lớp đối tượng CPhanSo  Bài 02: Hãy định nghĩa các toán tử +,-,*,/,+=,-=,*=,/= cho lớp đối tượng CSoPhuc.  Bài 03: Hãy định nghĩa các toán tử *,/,*=,/= cho lớp đối tượng CDonThuc.  Bài 04: Hãy định nghĩa các toán tử +,-,*,/,+=,-=,*=,/= cho lớp đối tượng CDaThuc. LTHĐTKhoa CNTT Chương 08 - 1 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chương 8 TOÁN TỬ SO SÁNH LTHĐTKhoa CNTT Chương 08 - 2 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 0. MỤC TIÊU  Hiểu được phương thức toán tử so sánh là gì?  Cài đặt toán tử so sánh cho các lớp đối tượng. LTHĐTKhoa CNTT Chương 08 - 3 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. KHÁI NIỆM  Toán tử so sánh trong ngôn ngữ lập trình C được sử dụng để so sánh giá trị của biến này với giá trị của biến khác.  Mở rộng cho phương pháp lập trình hướng đối tượng với C++ ta thể nói toán tử so sánh được sử dụng để so sánh đối tượng này với đối tượng khác.  Hiển nhiên việc so sánh hai đối tượng phải được thực hiện theo một tiêu chí nào đó. LTHĐTKhoa CNTT Chương 08 - 4 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. CÁC TOÁN TỬ SO SÁNH CƠ BẢN  Toán tử so sánh lớn hơn (operator >)  Toán tử so sánh nhỏ hơn (operator <)  Toán tử so sánh lớn hơn bằng (operator>=)  Toán tử so sánh nhỏ hơn bằng (operator<=)  Toán tử so sánh bằng (operator ==)  Toán tử so sánh khác (operator !=) LTHĐTKhoa CNTT Chương 08 - 5 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. ĐẶT VẤN ĐỀ  Hãy định nghĩa các phương thức cần thiết cho lớp đối tượng CHocSinh để các câu lệnh sau có thể thực thi được.  Đoạn chương trình 1. CHocSinh a,b; 2. cin>>a>>b; 3. if (a>b) 4. cout<<“DTB a lon hon DTB b”; 5. else 6. cout<<“DTB a ko lon hon b”; LTHĐTKhoa CNTT Chương 08 - 6 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Đoạn chương trình 1. CHocSinh a,b; 2. cin>>a>>b; 3. if (a>b) 4. cout<<“DTB a lon hon DTB b”; 5. else 6. cout<<“DTB a ko lon hon b”;  Để giải quyết vấn đề trên ta phải khai báo và định nghĩa phương thức toán tử so sánh lớn hơn cho lớp đối tương CPhanSo. LTHĐTKhoa CNTT Chương 08 - 7 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Khai báo lớp 11.class CHocSinh 12.{ 13. private: 14. char hoten[31]; 15. int toan; 16. int van; 17. float dtb; 18. public: 19. int operator>(CHocSinh); 20. int operator<(CHocSinh); 21. int operator>=(CHocSinh); 22. int operator =(CHocSinh); 23. int operator==(CHocSinh); 24. int operator!=(CHocSinh); 25.}; LTHĐTKhoa CNTT Chương 08 - 8 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Định nghĩa các phương thức 11.int CHocSinh::operator > (CHocSinh x) 12.{ 13. if(dtb>x.dtb) 14. return 1; 15. return 0; 16.} 17.int CHocSinh::operator < (CHocSinh x) 18.{ 19. if(dtb<x.dtb) 20. return 1; 21. return 0; 22.} LTHĐTKhoa CNTT Chương 08 - 9 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Định nghĩa các phương thức 11.int CHocSinh::operator >= (CHocSinh x) 12.{ 13. if(dtb>=x.dtb) 14. return 1; 15. return 0; 16.} 17.int CHocSinh::operator <= (CHocSinh x) 18.{ 19. if(dtb<=x.dtb) 20. return 1; 21. return 0; 22.} LTHĐTKhoa CNTT Chương 08 - 10 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. GIẢI QUYẾT VẤN ĐỀ  Định nghĩa các phương thức 11.int CHocSinh::operator == (CHocSinh x) 12.{ 13. if(dtb==x.dtb) 14. return 1; 15. return 0; 16.} 17.int CHocSinh::operator != (CHocSinh x) 18.{ 19. if(dtb!=x.dtb) 20. return 1; 21. return 0; 22.} LTHĐTKhoa CNTT Chương 08 - 11 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Bài toán: Hãy định nghĩa các toán tử so sánh cho lớp đối tượng CPhanSo 11.class CPhanSo 12.{ 13. private: 14. int tu; 15. int mau; 16. public: 17. CPhanSo operator-(CPhanSo); 18. int operator > (CPhanSo); 19. int operator < (CPhanSo); 20. int operator >= (CPhanSo); 21. int operator <= (CPhanSo); 22. int operator == (CPhanSo); 23. int operator != (CPhanSo); 24.}; LTHĐTKhoa CNTT Chương 08 - 12 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG 1. CPhanSo CPhanSo::operator- (CPhanSo x) 2. { 3. CPhanSo temp; 4. temp.tu=tu*x.mau-mau*x.tu; 5. temp.mau=mau*x.mau; 6. return temp; 7. } LTHĐTKhoa CNTT Chương 08 - 13 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator> (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau>0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 14 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator< (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau<0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 15 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator<= (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau<=0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 16 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator>= (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau>=0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 17 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator== (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau==0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 18 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. ỨNG DỤNG  Định nghĩa các toán tử so sánh 1. int CPhanSo::operator!= (CPhanSo x) 2. { 3. CPhanSo temp = *this – x; 4. if(temp.tu*temp.mau!=0) 5. return 1; 6. else 7. return 0; 8. } LTHĐTKhoa CNTT Chương 08 - 19 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. BÀI TẬP  Bài 01: Hãy định nghĩa tất cả các phương thức toán tử so sánh cho lớp đối tượng CPhanSo.  Bài 02: Hãy định nghĩa tất cả các phương thức toán tử so sánh cho lớp đối tượng CHonSo.  Bài 03: Hãy định nghĩa tất cả các phương thức toán tử so sánh cho lớp đối tượng CDiem trong mặt phẳng Oxy. Biết rằng tiêu chuẩn so sánh 2 điểm là so sánh theo khoảng cách tới gốc toạ độ. Điểm nào ở xa gốc hơn thì lớn hơn. LTHĐTKhoa CNTT Chương 08 - 20 GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. BÀI TẬP  Bài 04: Hãy định nghĩa toán tử so sánh bằng và toán tử so sánh khác cho tất cả các đối tượng sau: 1. Lớp điểm (CDiem) 2. Lớp ngày (CNgay) 3. Lớp thời gian (CThoiGian) 4. Lớp đơn thức (CDonThuc) 5. Lớp điểm không gian (CDiemKhongGian) 6. Lớp đường thẳng (CDuongThang) 7. Lớp số phức (CSoPhuc) 8. Lớp đường tròn (CDuongTron) 9. Lớp lớp tam giác (CTamGiac) 10. Lớp hình cầu (CHinhCau) Chương 09 - 1 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chương 9 KẾ THỪA Chương 09 - 2 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 0. MỤC TIÊU  Hiểu được các loại quan hệ?  Hiểu được kế thừa trong lập trình hướng đối tượng là gì?  Hiểu được khái niệm cây kế thừa.  Hiểu được khái niệm sơ đồ lớp. Chương 09 - 3 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.QUAN HỆ Người ta chia các quan hệ thành những loại như sau:  Quan hệ một một (1-1)  Quan hệ một nhiều (1-n)  Quan hệ nhiều nhiều (m-n)  Quan hệ đặt biệt hóa, tổng quát hóa. Chương 09 - 4 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.1. QUAN HỆ MỘT MỘT (1-1)  Khái niệm: Hai lớp đối tượng được gọi là quan hệ một-một với nhau khi một đối tượng thuộc lớp này quan hệ với một đối tượng thuộc lớp kia và một đối tượng thuộc lớp kia quan hệ duy nhất với một đối tượng thuộc lớp này.  Hình vẽ  Trong hình vẽ trên ta nói: một đối tượng thuộc lớp A quan hệ với một đối tượng thuộc lớp B và một đối tượng lớp B quan hệ duy nhất với một đối tượng thuộc lớp A. A B Quan Hệ Chương 09 - 5 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.1 QUAN HỆ MỘT MỘT (1-1)  Ví dụ minh họa LOPHOC GIAOVIEN Chủ nhiệm VO CHONG Hôn nhân Chương 09 - 6 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.2. QUAN HỆ MỘT NHIỀU (1-n)  Khái niệm: Hai lớp đối tượng được gọi là quan hệ một-nhiều với nhau khi một đối tượng thuộc lớp này quan hệ với nhiều đối tượng thuộc lớp kia và một đối tượng lớp kia quan hệ duy nhất với một đối tượng thuộc lớp này.  Hình vẽ  Trong hình vẽ trên ta nói: một đối tượng thuộc lớp A quan hệ với nhiều đối tượng thuộc lớp B và một đối tượng lớp B quan hệ duy nhất với một đối tượng thuộc lớp A. A B Quan Hệ Chương 09 - 7 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.2 QUAN HỆ MỘT NHIỀU (1-n)  Ví dụ minh họa: LOPHOC HOCSINH có CHA CON Huyết thống HOASI TACPHAM Sáng tác Chương 09 - 8 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.2 QUAN HỆ MỘT NHIỀU (1-n)  Ví dụ minh họa: Chương 09 - 9 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.3 QUAN HỆ NHIỀU NHIỀU (m-n)  Khái niệm: hai lớp đối tượng được gọi là quan hệ nhiều-nhiều với nhau khi một đối tượng thuộc lớp này quan hệ với nhiều đối tượng thuộc lớp kia và một đối tượng lớp kia cũng có quan hệ với nhiều đối tượng thuộc lớp này.  Hình vẽ  Trong hình vẽ trên ta nói: một đối tượng thuộc lớp A quan hệ với nhiều đối tượng thuộc lớp B và một đối tượng lớp B cũng có quan hệ với nhiều đối tượng thuộc lớp A. A B Quan Hệ Chương 09 - 10 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.3 QUAN HỆ NHIỀU NHIỀU (m-n)  Ví dụ minh họa: NAM NỮ yêu BACSI BENHNHAN Khám bệnh Chương 09 - 11 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.3 QUAN HỆ NHIỀU NHIỀU (m-n)  Ví dụ minh họa: Chương 09 - 12 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.4. QUAN HỆ ĐẶC BIỆT HÓA- TỔNG QUÁT HOÁ  Khái niệm: hai lớp đối tượng được gọi là quan hệ đặc biệt hóa-tổng quát hóa với nhau khi, lớp đối tượng này là trường hợp đặc biệt của lớp đối tượng kia và lớp đối tượng kia là trường hợp tổng quát của lớp đối tượng này.  Hình vẽ A B Chương 09 - 13 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.4. QUAN HỆ ĐẶT BIỆT HÓA- TỔNG QUÁT HOÁ  Hình vẽ  Trong hình vẽ trên ta nói: lớp đối tượng B là trường hợp đặc biệt của lớp đối tượng A và lớp đối tượng A là trường hợp tổng quát của lớp đối tượng B. A B Chương 09 - 14 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.4. QUAN HỆ ĐẶT BIỆT HÓA- TỔNG QUÁT HOÁ  Ví dụ 1: TAMGIAC TAMGIACCAN Chương 09 - 15 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1.4. QUAN HỆ ĐẶT BIỆT HÓA- TỔNG QUÁT HOÁ  Ví dụ 2: DONGVAT HEONGUOI Chương 09 - 16 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. CÂY KẾ THỪA  Khái niệm: Cây kế thừa là một cây đa nhánh thể hiện mối quan hệ đặc biệt hóa-tổng quát hóa giữa các lớp trong hệ thống, chương trình.  Ví dụ: Hãy vẽ cây kế thừa cho các lớp đối tượng sau:  Lớp XEDAP  Lớp XEGANMAY  Lớp XEHOI  Lớp XEHAIBANH  Lớp XETAINHE • Lớp XELAM • Lớp XE • Lớp XEBABANH • Lớp XEBONBANH • Lớp XEXICHLO Chương 09 - 17 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. CÂY KẾ THỪA (tiếp) Chương 09 - 18 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. SƠ ĐỒ LỚP  Khái niệm: Sơ đồ lớp là sơ đồ thể hiện tất cả các mối quan hệ giữa các lớp trong hệ thống, chương trình.  Ví dụ minh họa: Hãy vẽ sơ đồ lớp cho các lớp đối tượng sau:  Lớp GIAOVIEN  Lớp HOCSINH  Lớp LOPHOC  Lớp MONHOC  Lớp NHANVIEN: tất cả những người làm việc trong trường.  Lớp CNV: là những người làm việc trong nhà trường nhưng ko trực tiếp đứng lớp. Ví dụ: Bảo vệ, lao công, bảo mẫu, Chương 09 - 19 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. SƠ ĐỒ LỚP Chương 09 - 20 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. KẾ THỪA TRONG C++  Thế giới thực  Lập trình hướng đối tượng với C++  Phạm vi truy xuất  Từ khoá dẫn xuất Chương 09 - 21 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.1 THẾ GIỚI THỰC  Trong hình vẽ trên ta nói A và B có quan hệ đặc biệt hoá, tổng quát hoá với nhau. Trong đó B là trường hợp đặt biệt của A, và A là trường hợp tổng quát của B. A B Chương 09 - 22 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.2 LTHĐT VỚI C++ 1. class A 2. { 3. ... 4. }; 5. class B: A 6. { 7. ... 8. };  Trong khai báo trên ta nói lớp B kế thừa từ lớp A.  Lớp đối tượng A được gọi là lớp cơ sở.  Lớp đối tượng B được gọi là lớp dẫn xuất từ lớp đối tượng A. A B Chương 09 - 23 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.3 PHẠM VI TRUY XUẤT  Một thuộc tính hay một phương thức khi được khai báo trong một lớp ta có thể khai báo trong 3 phạm vi khác nhau: private, public hoặc protected.  Về mặt nguyên tắc cho tới thời điểm này thì một thuộc tính hay một phương thức khi được khai báo trong phạm vi private hay protected thì tương đương nhau. Nghĩa là, thuộc tính và phương thức được khai báo trong hai phạm vi này chỉ được phép truy xuất bên trong lớp mà thôi và không được quyền truy xuất từ bên ngoài lớp. Chương 09 - 24 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.3 PHẠM VI TRUY XUẤT  Ví dụ: Hãy cho biết trong đoạn chương trình sau câu lệnh nào đúng, câu lệnh nào sai. 1. class A 2. { 3. private: 4. int a; 5. void f(); 6. protected: 7. int b; 8. void g(); 9. public: 10. int c; 11. void h(); 12.}; Chương 09 - 25 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.3 PHẠM VI TRUY XUẤT 13.void A::f() 14.{ 15. a = 1; 16. b = 2; 17. c = 3; 18.} 19.void A::g() 20.{ 21. a = 4; 22. b = 5; 23. c = 6; 24.} 25.void A::h() 26.{ 27. a = 7; 28. b = 8; 29. c = 9; 30.} Chương 09 - 26 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.3 PHẠM VI TRUY XUẤT 31.void main() 32.{ 33. A x; 34. x.a = 10; 35. x.f(); 36. x.b = 20; 37. x.g(); 38. x.c = 30; 39. x.h(); 40.} Chương 09 - 27 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.4 TỪ KHÓA DẪN XUẤT 1. class A 2. { 3. ... 4. }; 5. class B: A 6. { 7. ... 8. };  Trong khai báo trên ta nói lớp B kế thừa từ lớp A.  Lớp đối tượng A được gọi là lớp cơ sở.  Lớp đối tượng B được gọi là lớp dẫn xuất từ lớp đối tượng A. A B Chương 09 - 28 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.4 TỪ KHÓA DẪN XUẤT  Trong ngôn ngữ C++ có ba loại từ khóa dẫn xuất đó là: private, protected và public. Thông thường trong thực tế người ta hay sử dụng từ khóa dẫn xuất public là nhiều nhất. Chương 09 - 29 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.4 TỪ KHÓA DẪN XUẤT  Ví dụ 01: Khai báo lớp tam giác và lớp tam giác cân. 1. class CTamGiac 2. { 3. ... 4. }; 5. class CTamGiacCan:public CTamGiac 6. { 7. ... 8. }; TAMGIAC TAMGIACCAN Chương 09 - 30 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4.4 TỪ KHÓA DẪN XUẤT  Ví dụ 02: Khai báo lớp động vật, lớp heo và lớp người. 11.class CDongVat 12.{ 13. ... 14.}; 15.class CHeo:private CDongVat 16.{ 17. ... 18.}; 19.class CNguoi:public CDongVat 20.{ 21. ... 22.}; Chương 09 - 31 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Protected Public Chương 09 - 32 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Protected Public Chương 09 - 33 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Chương 09 - 34 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Protected Chương 09 - 35 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Protected Public Chương 09 - 36 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Protected Public Chương 09 - 37 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Private Protected Public Chương 09 - 38 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private Protected Public Chương 09 - 39 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private || || Protected Public Chương 09 - 40 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private || || Protected private Public Chương 09 - 41 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private || || Protected private protected Public Chương 09 - 42 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private || || Protected private protected Public private Chương 09 - 43 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++  Ghi chú: Từ khoá dẫn xuất có ba loại là private, protected, public. Các sinh viên tự tìm hiểu thêm từ khoá dẫn xuất protected trong tài liệu. Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private || || Protected private protected Public private public Chương 09 - 44 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Các thuộc tính và phương thức được khai báo trong phạm vi private của lớp cơ sở thì sẽ không được hiểu ở lớp dẫn xuất.  Các thuộc tính và phương thức được khai báo trong phạm vi protected của lớp cơ sở nếu được dẫn xuất bằng từ khóa private thì các thuộc tính và phương thức đó sẽ được hiểu ở lớp dẫn xuất như là thành phần private của lớp dẫn xuất.  Các thuộc tính và phương thức được khai báo trong phạm vi protected của lớp cơ sở nếu được dẫn xuất bằng từ khóa public thì các thuộc tính và phương thức đó sẽ được hiểu ở lớp dẫn xuất hư là thành phần protected của lớp dẫn xuất. Chương 09 - 45 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Các thuộc tính và phương thức được khai báo trong phạm vi public của lớp cơ sở nếu được dẫn xuất bằng từ khóa private thì các thuộc tính và phương thức đó sẽ được hiểu ở lớp dẫn xuất như là thành phần private của lớp dẫn xuất.  Các thuộc tính và phương thức được khai báo trong phạm vi public của lớp cơ sở nếu được dẫn xuất bằng từ khóa public thì các thuộc tính và phương thức đó sẽ được hiểu ở lớp dẫn xuất như là thành phần public của lớp dẫn xuất. Chương 09 - 46 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++ Từ khóa dẫn xuất Phạm vi lớp cơ sở Private Public Private (1) (2) Protected (3) (4) Public (5) (6) Chương 09 - 47 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++ (1) (2) (3) (4) (5) (6) Chương 09 - 48 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++ Chương 09 - 49 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. QUI TẮC KẾ THỪA TRONG C++  Bảng qui tắc kế thừa trong C++ Chương 09 - 50 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. CÂY KẾ THỪA CHI TIẾT  Qui tắc vẽ cây kế thừa chi tiết:  Các thuộc tính và phương thức thuộc phạm vi private được vẽ với màu xanh bên trái.  Các thuộc tính và phương thức thuộc phạm vi protected được vẽ với màu xanh bên phải.  Các thuộc tính và phương thức thuộc phạm vi public được vẽ với màu đỏ bên phải.  Các thuộc tính và phương thức có được do kế thừa được vẽ bằng nét đứt không liên tục.  Các thuộc tính và phương thức của chính bản thân lớp được vẽ bằng nét liền liên tục. Chương 09 - 51 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. CÂY KẾ THỪA CHI TIẾT A B a f() b g() c h() t aa() b g() z xy() c h() public Chương 09 - 52 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 6. CÂY KẾ THỪA CHI TIẾT A B y g() C p ab() z abc(int) public public ab() mn() xyz() k a f() x q t h() x uv() x ab() y g() k mn() p ab() g() y Chương 09 - 53 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Ví dụ dẫn nhập 01: Hãy cho biết trong chương trình dưới đây câu lệnh nào đúng câu lệnh nào sai: 11.class A 12.{ 13. ... 14.}; 15.class B:public A 16.{ 17. ... 18.}; 19.void main() 20.{ 21. A a; 22. B b; 23. a = b; 24. b = a; 25.} Chương 09 - 54 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Ví dụ dẫn nhập 02: Hãy cho biết đoạn chương trình dưới đây câu lệnh nào đúng, câu lệnh nào sai: 1. class A 2. { 3. ... 4. }; 9. void main() 10.{ 11. A *a; 12. B *b; 13. A x; 14. B y; 15. a = &x; 16. b = &y; 17. a = &y; 18. b = &x; 19.} 5. class B: public A 6. { 7. ... 8. }; Chương 09 - 55 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Toán tử gán trong kế thừa được thực hiện theo nguyên tắc: trường hợp đặt biệt có thể được gán cho trường hợp tổng quát, và trường hợp tổng quát thì không thể gán cho trường hợp đặt biệt được.  Qui tắc trên áp dụng cho tất cả các ngôn ngữ hỗ trợ lập trình hướng đối tượng như C++, Java, VB.NET, C#, Python,... Chương 09 - 56 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Áp dụng qui tắc trên cho ngôn ngữ lập trình hướng đối tượng C++ ta có thể nói như sau: một đối tượng thuộc lớp dẫn xuất có thể được gán cho một đối tượng thuộc lớp cơ sở. Điều ngược lại là sai, nghĩa là một đối tượng thuộc lớp cơ sở không được quyền gán cho một đối tượng thuộc lớp dẫn xuất. Chương 09 - 57 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Ví dụ dẫn nhập 01: Hãy cho biết trong chương trình dưới đây câu lệnh nào đúng câu lệnh nào sai: 11.class A 12.{ 13. ... 14.}; 15.class B:public A 16.{ 17. ... 18.}; 19.void main() 20.{ 21. A a; 22. B b; 23. a = b; 24. b = a; 25.} Chương 09 - 58 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Mở rộng qui tắc trên cho con trỏ đối tượng ta có thể nói như sau: một con trỏ đối tượng thuộc lớp cơ sở có thể giữ địa chỉ của một đối tượng thuộc lớp dẫn xuất. Ngược lai, một con trỏ đối tượng thuộc lớp dẫn xuất không thể giữ địa chỉ của một đối tượng thuộc lớp cơ sở. Chương 09 - 59 LTHĐTKhoa CNTT GV. Nguyễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 7. TOÁN TỬ GÁN TRONG KẾ THỪA  Hãy cho biết đoạn chương trình dưới đây câu lệnh nào đúng, câu lệnh nào sai: 11.class A 12.{ 13.}; 14.class B:public A 15.{ 16.}; 17.void main() 18.{ 19. A *a; 20. B *b; 21. A x; 22. B y; 23. a = &x; 24. b = &y; 25. a = &y; 26. b = &x; 27.} LTHĐTKhoa CNTT Chương 10- 1GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chương 10 MẢNG MỘT CHIỀU CĂN BẢN LTHĐTKhoa CNTT Chương 10- 2GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 − Bài toán: Viết chương trình thực hiện các yêu cầu sau bằng phương pháp lập trình hướng đối tượng + Nhập mảng một chiều các số nguyên + Xuất mảng một chiều các số nguyên + Tính tổng các giá trị trong mảng − Chương trình LTHĐTKhoa CNTT Chương 10- 3GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 11.#include 12.class CMangNguyen 13.{ 14. private: 15. int a[100]; 16. int n; 17. public: 18. void Nhap(); 19. void Xuat(); 20. int Tong(); 21.}; LTHĐTKhoa CNTT Chương 10- 4GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 11.void main() 12.{ 13. CMangNguyen x; 14. x.Nhap(); 15. x.Xuat(); 16. int kq = x.Tong(); 17. cout << “Tong = ” << kq; 18.} LTHĐTKhoa CNTT Chương 10- 5GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 11.void CMangNguyen::Nhap() 12.{ 13. cout<<"Nhap n : "; 14. cin>>n; 15. for (int i=0 ; i<n ; i++) 16. { 17. cout<<“a[”<< i <<“]:”; 18. cin >> a[i]; 19. } 20.} LTHĐTKhoa CNTT Chương 10- 6GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 11.void CMangNguyen::Xuat() 12.{ 13. for (int i=0; i<n ;i++) 14. cout << a[i] << “ “; 15.} LTHĐTKhoa CNTT Chương 10- 7GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 11.int CMangNguyen::Tong() 12.{ 13. int s = 0; 14. for (int i=0;i<n;i++) 15. s = s + a[i]; 16. return s; 17.} LTHĐTKhoa CNTT Chương 10- 8GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 − Bài toán: Viết chương trình thực hiện các yêu cầu sau bằng phương pháp lập trình hướng đối tượng + Nhập mảng một chiều các số thực + Xuất mảng một chiều các số thực + Tìm phần tử lớn nhất trong mảng − Chương trình LTHĐTKhoa CNTT Chương 10- 9GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 11.#include 12.class CMangThuc 13.{ 14. private: 15. float a[100]; 16. int n; 17. public: 18. void Nhap(); 19. void Xuat(); 20. float LonNhat(); 21.}; LTHĐTKhoa CNTT Chương 10- 10GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 11.void main() 12.{ 13. CMangThuc x; 14. x.Nhap(); 15. x.Xuat(); 16. float kq = x.LonNhat(); 17. cout << “\n” << kq; 18.} LTHĐTKhoa CNTT Chương 10- 11GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 11.void CMangThuc::Nhap() 12.{ 13. cout << "Nhap n : "; 14. cin >> n; 15. for (int i=0 ; i<n ; i++) 16. { 17. cout <<“a[”<<i<<“]:”; 18. cin >> a[i]; 19. } 20.} LTHĐTKhoa CNTT Chương 10- 12GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 11.void CMangThuc::Xuat() 12.{ 13. for (int i=0 ; i<n ; i++) 14. cout << a[i] << " "; 15.} LTHĐTKhoa CNTT Chương 10- 13GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 2. VÍ DỤ DẪN NHẬP 2 11.float CMangThuc::LonNhat() 12.{ 13. float lc = a[0]; 14. for (int i=0;i<n;i++) 15. if (a[i] > lc) 16. lc = a[i]; 17. return lc; 18.} LTHĐTKhoa CNTT Chương 10- 14GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 − Bài toán: Viết chương trình thực hiện các yêu cầu sau bằng phương pháp lập trình hướng đối tượng: + Nhập mảng một chiều các phân số + Xuất mảng một chiều các phân số + Đếm số lượng giá trị dương có trong mảng − Chương trình LTHĐTKhoa CNTT Chương 10- 15GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.#include 12.class CPhanSo 13.{ 14. private: 15. int tu; 16. int mau; 17. public: 18. void Nhap(); 19. void Xuat(); 20. int KtDuong(); 21.}; LTHĐTKhoa CNTT Chương 10- 16GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.class CMangPhanSo 12.{ 13. private: 14. CPhanSo a[100]; 15. int n; 16. public: 17. void Nhap(); 18. void Xuat(); 19. int DemDuong(); 20.}; LTHĐTKhoa CNTT Chương 10- 17GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.void main() 12.{ 13. CMangPhanSo x; 14. x.Nhap(); 15. x.Xuat(); 16. int kq = x.DemDuong(); 17. cout << "\n" << kq; 18.} LTHĐTKhoa CNTT Chương 10- 18GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.void CPhanSo::Nhap() 12.{ 13. cout<<"Nhap tu :"; 14. cin>>tu; 15. cout<<"Nhap mau :"; 16. cin>>mau; 17.} LTHĐTKhoa CNTT Chương 10- 19GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.void CPhanSo::Xuat() 12.{ 13. cout << tu << "/" << mau; 14.} LTHĐTKhoa CNTT Chương 10- 20GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.int CPhanSo::KtDuong() 12.{ 13. if (tu*mau > 0) 14. return 1; 15. return 0; 16.} LTHĐTKhoa CNTT Chương 10- 21GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.void CMangPhanSo::Nhap() 12.{ 13. cout << "Nhap n : "; 14. cin >> n; 15. for (int i=0;i<n;i++) 16. { 17. cout<<“Nhap a[”<<i<<“]:”; 18. a[i].Nhap(); 19. } 20.} LTHĐTKhoa CNTT Chương 10- 22GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.void CMangPhanSo::Xuat() 12.{ 13. for (int i=0;i<n;i++) 14. { 15. a[i].Xuat(); 16. cout << " "; 17. } 18.} LTHĐTKhoa CNTT Chương 10- 23GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 3. VÍ DỤ DẪN NHẬP 3 11.int CMangPhanSo::DemDuong() 12.{ 13. int dem = 0; 14. for (int i=0;i<n;i++) 15. if (a[i].KtDuong()==1) 16. dem = dem + 1; 17. return dem; 18.} LTHĐTKhoa CNTT Chương 10- 24GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN − Hãy xây dựng lớp số nguyên với các phương thức như sau: + Phương thức nhập mảng + Phương thức xuất mảng + Phương thức liệt kê các giá trị chẵn trong mảng + Phương thức tính tổng các phần tử trong mảng + Phương thức tính tổng các giá trị cực đại trong mảng + Phương thức đếm số lượng giá trị lẻ có trong mảng + Phương thức đếm số lần xuất hiện của giá trị x trong mảng LTHĐTKhoa CNTT Chương 10- 25GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN − Hãy xây dựng lớp số nguyên với các phương thức như sau: + Phương thức kiểm tra mảng có tồn tại giá trị 0 hay không? + Phương thức kiểm tra mảng có toàn chẵn hay không? + Phương thức kiểm tra mảng có tăng dần hay không? + Phương thức sắp xếp các giá trị trong mảng tăng dần + Phương thức sắp xếp các giá trị trong mảng giảm dần + Phương thức sắp xếp các giá trị lẻ trong mảng tăng dần LTHĐTKhoa CNTT Chương 10- 26GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.class CMangNguyen 12.{ 13. private: 14. int a[100]; 15. int n; 16. public: 17. void Nhap(); 18. void Xuat(); 19. void LietKeChan(); 20. int TinhTong(); 21. int LonNhat(); 22. int TongCucDai(); 23. int DemLe(); 24. int TanSuat(int); 25. int KTTonTaiKhong(); 26. int KTToanChan(); 27. int KTTangDan(); LTHĐTKhoa CNTT Chương 10- 27GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.class CMangNguyen 12.{ 13. private: 14. int a[100]; 15. int n; 16. public: 17. void SapTang(); 18. void SapGiam(); 19. void SapLeTang(); 20.}; LTHĐTKhoa CNTT Chương 10- 28GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::Nhap() 12.{ 13. cout<<"Nhap n : "; 14. cin>>n; 15. for (int i=0 ; i<n ; i++) 16. { 17. cout<<"a["<<i<< "]:"; 18. cin >> a[i]; 19. } 20.} LTHĐTKhoa CNTT Chương 10- 29GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::Xuat() 12.{ 13. for (int i=0;i<n;i++) 14. cout <<a[i]<<" "; 15.} LTHĐTKhoa CNTT Chương 10- 30GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::LietKeChan() 12.{ 13. for (int i=0; i<n; i++) 14. if (a[i]%2 == 0) 15. cout << a[i] << " "; 16.} LTHĐTKhoa CNTT Chương 10- 31GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::TinhTong() 12.{ 13. int s = 0; 14. for (int i=0;i<n;i++) 15. s = s + a[i]; 16. return S; 17.} LTHĐTKhoa CNTT Chương 10- 32GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::LonNhat() 12.{ 13. int lc = a[0]; 14. for (int i=0;i<n;i++) 15. if (a[i] > lc) 16. lc = a[i]; 17. return lc; 18.} LTHĐTKhoa CNTT Chương 10- 33GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::TongCucDai() 12.{ 13. if(n<=1) 14. return 0; 15. int s = 0; 16. if(a[0]>a[1]) 17. s = s + a[0]; 18. for(int i=1;i<=n-2;i++) 19. if(a[i]>a[i-1]&& 20. a[i]>a[i+1]) 21. s = s + a[i]; 22. if(a[n-1]>a[n-2]) 23. s = s + a[n-1]; 24. return s; 25.} LTHĐTKhoa CNTT Chương 10- 34GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::DemLe() 12.{ 13. int dem = 0; 14. for (int i=0; i<n; i++) 15. if (a[i]%2!=0) 16. dem = dem + 1; 17. return dem; 18.} LTHĐTKhoa CNTT Chương 10- 35GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::TanSuat(int x) 12.{ 13. int dem = 0; 14. for (int i=0; i<n; i++) 15. if (a[i]==x) 16. dem = dem + 1; 17. return dem; 18.} LTHĐTKhoa CNTT Chương 10- 36GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11. int CMangNguyen::KTTonTaiKhong() 12.{ 13. int flag = 0; 14. for (int i=0; i<n; i++) 15. if (a[i]==0) 16. flag = 1; 17. return flag; 18.} LTHĐTKhoa CNTT Chương 10- 37GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::KTToanChan() 12.{ 13. int flag = 1; 14. for (int i=0; i<n; i++) 15. if (a[i]%2!=0) 16. flag = 0; 17. return flag; 18.} LTHĐTKhoa CNTT Chương 10- 38GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.int CMangNguyen::KTTangDan() 12.{ 13. int flag = 1; 14. for (int i=0;i<=n-2;i++) 15. if (a[i]>a[i+1]) 16. flag = 0; 17. return flag; 18.} LTHĐTKhoa CNTT Chương 10- 39GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::SapTang() 12.{ 13. for (int i=0;i<=n-2;i++) 14. for (int j=i+1;j<=n-1;j++) 15. if (a[i]>a[j]) 16. { 17. int temp = a[i]; 18. a[i] = a[j]; 19. a[j] = temp; 20. } 21.} LTHĐTKhoa CNTT Chương 10- 40GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::SapGiam() 12.{ 13. for (int i=0;i<=n-2;i++) 14. for (int j=i+1;j<=n-1;j++) 15. if (a[i]<a[j]) 16. { 17. int temp = a[i]; 18. a[i] = a[j]; 19. a[j] = temp; 20. } 21.} LTHĐTKhoa CNTT Chương 10- 41GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 4. XÂY DỰNG LỚP MẢNG SỐ NGUYÊN 11.void CMangNguyen::SapLeTang() 12.{ 13. for (int i=0;i<=n-2;i++) 14. for (int j=i+1;j<=n-1;j++) 15. if(a[i] < a[j] && 16. a[i]%2!=0 && 17. a[j]%2!=0) 18. { 19. int temp = a[i]; 20. a[i] = a[j]; 21. a[j] = temp; 22. } 23.} LTHĐTKhoa CNTT Chương 10- 42GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC − Hãy xây dựng lớp số thực với các phương thức như sau: + Phương thức nhập mảng + Phương thức xuất mảng + Phương thức tính tổng các phần tử trong mảng + Phương thức tìm phần tử nhỏ nhất trong mảng + Phương thức tính tổng các giá trị cực tiểu trong mảng + Phương thức đếm số lần xuất hiện của giá trị x trong mảng LTHĐTKhoa CNTT Chương 10- 43GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC − Hãy xây dựng lớp số thực với các phương thức như sau: + Phương thức kiểm tra mảng có tồn tại giá trị 0 hay không? + Phương thức kiểm tra mảng có tăng dần hay không? + Phương thức sắp xếp các giá trị trong mảng tăng dần + Phương thức sắp xếp các giá trị trong mảng giảm dần LTHĐTKhoa CNTT Chương 10- 44GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.class CMangThuc 12.{ 13. private: 14. float a[100]; 15. int n; 16. public: 17. void Nhap(); 18. void Xuat(); 19. float TinhTong(); 20. float NhoNhat(); 21. float TongCucTieu(); 22. int DemXuatHien(float); 23. int KTTonTaiKhong(); 24. int KTTangDan(); 25. void SapTang(); 26. void SapGiam(); 27.}; LTHĐTKhoa CNTT Chương 10- 45GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.void CMangThuc::Nhap() 12.{ 13. cout << "Nhap n : "; 14. cin >> n; 15. for (int i=0 ; i<n ; i++) 16. { 17. cout<<“a[”<<i<< “]:”; 18. cin >> a[i]; 19. } 20.} LTHĐTKhoa CNTT Chương 10- 46GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.void CMangThuc::Xuat() 12.{ 13. for (int i=0;i<n;i++) 14. cout<<a[i]<<" "; 15.} LTHĐTKhoa CNTT Chương 10- 47GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.float CMangThuc::TinhTong() 12.{ 13. float s = 0; 14. for (int i=0; i<n; i++) 15. s = s + a[i]; 16. return s; 17.} LTHĐTKhoa CNTT Chương 10- 48GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.float CMangThuc::NhoNhat() 12.{ 13. float lc = a[0]; 14. for (int i=0;i<n;i++) 15. if (a[i]<lc) 16. lc = a[i]; 17. return lc; 18.} LTHĐTKhoa CNTT Chương 10- 49GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.int CMangThuc::TanSuat(float x) 12.{ 13. int dem = 0; 14. for (int i=0; i<n; i++) 15. if (a[i]==x) 16. dem = dem + 1; 17. return dem; 18.} LTHĐTKhoa CNTT Chương 10- 50GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.int CMangThuc::KTTonTaiKhong() 12.{ 13. for (int i=0;i<n;i++) 14. if (a[i]==0) 15. return 1; 16. return 0; 17.} LTHĐTKhoa CNTT Chương 10- 51GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.int CMangThuc::KTTangDan() 12.{ 13. for (int i=1; i<n; i++) 14. if (a[i-1]<a[i]) 15. return 1; 16. return 0; 17.} LTHĐTKhoa CNTT Chương 10- 52GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.void CMangThuc::SapTang() 12.{ 13. for(int i=0;i<=n-2;i++) 14. for(int j=i+1;j<=n-1;j++) 15. if(a[i]>a[j]) 16. { 17. float temp = a[i]; 18. a[i] = a[j]; 19. a[j] = temp; 20. } 21.} LTHĐTKhoa CNTT Chương 10- 53GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 5. XÂY DỰNG LỚP MẢNG SỐ THỰC 11.void CMangThuc::SapGiam() 12.{ 13. for(int i=0;i<=n-2;i++) 14. for(int j=i+1;j<=n-1;j++) 15. if(a[i]>a[j]) 16. { 17. float temp = a[i]; 18. a[i] = a[j]; 19. a[j] = temp; 20. } 21.} LTHĐTKhoa CNTT Chương 11 - 1GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang Chương 11 MA TRẬN CĂN BẢN LTHĐTKhoa CNTT Chương 11 - 2GV. Nguy ễn Sơn Hoàng Quốc ThS. Nguyễn Tấn Trần Minh Khang 1. VÍ DỤ DẪN NHẬP 1 − Bài toán: Viết chương t

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf
Tài liệu liên quan