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.
...
431 trang |
Chia sẻ: Khủng Long | Lượt xem: 922 | Lượt tải: 0
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:
- tailieu.pdf