Ngô Công Thắng 14 II... Ngô Công Thắng 35.[r]
(1)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng
PH
Ầ
N II L
Ậ
P TRÌNH H
ƯỚ
NG
ĐỐ
I T
ƯỢ
NG
Chương 10 Khái niệm lập trình hướng đối tượng Chương 11 Lớp vàđối tượng lớp
Chương 12 Chồng hàm (function overloading) Chương 13 Hàm tạo hàm hủy
Chương 14 Chồng toán tử (operator overloading) Chương 15 Sự kế thừa
Chương 16 Sự kết nối động - Hàm ảo
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng Chương 10 Khái niệm lập trình hướng đối tượng
I Lập trình cấu trúc lập trình hướng đối tượng
II Các khái niệm lập trình hướng đối tượng III Các ngơn ngữ lập trình hướng đối tượng
IV Phân tích thiết kế theo hướng đối tượng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng
I L
ậ
p trình c
ấ
u trúc l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng
1 L
ậ
p trình c
ấ
u trúc
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng
1 L
ậ
p trình c
ấ
u trúc
²
T
ư
t
ưở
ng c
ủ
a l
ậ
p trình c
ấ
u trúc
(structural programming) chia ch
ươ
ng
trình thành ch
ươ
ng trình (trong C++
g
ọ
i hàm) module M
ỗ
i hàm th
ự
c
hi
ệ
n m
ộ
t nhi
ệ
m v
ụ
xác
đị
nh nào
đ
ó, m
ỗ
i
module bao g
ồ
m m
ộ
t s
ố
hàm.
²
Khi ch
ươ
ng trình ngày l
ớ
n ph
ứ
c
t
ạ
p l
ậ
p trình c
ấ
u trúc b
ắ
t
đầ
u b
ộ
c l
ộ
nh
ữ
ng
(2)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng
1 L
ậ
p trình c
ấ
u trúc (ti
ế
p)
²
Mơ hình l
ậ
p trình c
ấ
u trúc nh
ư
sau:
Dữ liệu Dữ liệu Dữ liệu
Hàm Hàm Hàm Hàm
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng
1 L
ậ
p trình c
ấ
u trúc (ti
ế
p)
²Lý làm cho phương pháp lập trình cấu trúc tự bộc lộ điểm yếu liệu chương trình khơng coi trọng Các liệu quan trọng chương trình lưu trữ biến tồn cục, cho phép hàm truy nhập Mà hàm lại viết nhiều người lập trình khác nên nguy hỏng, liệu lớn
²Hơn nữa, nhiều hàm truy nhập liệu nên liệu thay đổi hàm phải thay đổi theo Việc tìm hàm cần thay đổi khó việc thay đổi hàm cho cịn khó
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng
1 L
ậ
p trình c
ấ
u trúc (ti
ế
p)
²
L
ậ
p trình c
ấ
u trúc th
ườ
ng khó thi
ế
t k
ế
ch
ươ
ng trình b
ở
i thành ph
ầ
n c
ủ
a
ch
ươ
ng trình c
ấ
u trúc (là hàm c
ấ
u trúc d
ữ
li
ệ
u) không mô ph
ỏ
ng
đượ
c th
ế
gi
ớ
i th
ự
c Ví
d
ụ
: gi
ả
s
ử
ta c
ầ
n vi
ế
t mã
để
t
ạ
o giao di
ệ
n
đồ
h
ọ
a v
ớ
i ng
ườ
i s
ử
d
ụ
ng nh
ư
menu, c
ử
a s
ổ
, nút
b
ấ
m,… N
ế
u l
ậ
p trình c
ấ
u trúc câu h
ỏ
i
đặ
t
ra dùng c
ấ
u trúc d
ữ
li
ệ
u nào? Các hàm c
ầ
n
làm gì?
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Cơng Thắng
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng
²Ý tưởng lập trình hướng đối tượng (object oriented programming, OOP) kết hợp liệu hàm thao tác liệu vào thực thể chương trình gọi đối tượng
(3)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
Mơ hình lập trình hướngđối tượng
Dữ liệu
Hàm thành viên Hàm thành viên
Dữ liệu
Hàm thành viên Hàm thành viên
Dữ liệu
Hàm thành viên Hàm thành viên
Đối tượng
Đối tượng
Đối tượng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 10
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
²Trong lập trình hướng đối tượng liệu ẩn
để tránh thay đổi vơ tình làm hỏng liệu Dữ liệu hàm tác động lên đóng gói thực thể chương trình
²Nếu muốn thay đổi liệu đối tượng phải biết xác hàm tương tác với nó; tức hàm thành viên
đối tượng Khơng có hàm truy nhập liệu Điều giúp đơn giản hoá việc viết, gỡ rối, bảo trì chương trình
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng 11
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
Mơ hình cơng ty kinh doanh Dữ liệu phòng
kinh doanh Trưởng phòng
kinh doanh
Phòng kinh doanh
Nhân viên phòng kinh doanh Dữ liệu phòng
nhân Trưởng phòng
nhân Nhân viên phòng
nhân
Dữ liệu phòng tài vụ Trưởng phòng tài
vụ Nhân viên phòng
tài vụ
Phòng nhân Phòng tài vụ
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng 12
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
(4)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 13
2 L
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
Người tađã tổng hợp cácđặc tính LTHDT: Tất đối tượng
2 Chương trình hướng đối tượng coi tập hợp cácđối tượng tương tác với
3 Mỗi đối tượng chương trình có liệu
độc lập chiếm nhớ riêng Mỗi đối tượng có dạng đặc trưng lớp
đối tượng
5 Tất đối tượng thuộc lớp có hành vi giống
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 14 II Các khái niệm lập trình hướng đối tượng
1 Đối tượng (object) Lớp (class)
3 Sự kế thừa (inheritance) Sự sử dụng lại (Reusability)
5 Sự đa hình chồng hàm (polymorphism and overloading) Che giấu liệu
7 Truyền thông báo
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 15
1
Đố
i t
ượ
ng (object)
²Như ta biết, đối tượng thành phần chương trình chứa liệu hàm thao tác liệuđó
²Trong lập trình hướng đối tượng khơng tìm cách chia chương trình thành hàm mà tìm cách chia chương trình thành đối tượng Việc chia chương trình thành đối tượng làm cho việc thiết kế chương trình trở nên dễ dàng đối tượng chương trình gần gũi với đối tượng thực tế
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 16
1
Đố
i t
ượ
ng (ti
ế
p)
Ví dụ số đối tượng thực tế trở thành
đối tượng chương trình
²Các đối tượng vật lý:
n Các thang máy chương trìnhđiều khiển tháng máy n Các máy bay chương trìnhđiều hành bay
n Các xe tơ chương trình mơ luồng giao thơng
²Các phần tử mơi trường người sử dụng máy tính:
n Các cửa sổ n Các menu
n Cácđối tượng đồ họa (như hình chữ nhật, hình trịn, hình tam giác,…)
(5)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 17
1
Đố
i t
ượ
ng (ti
ế
p)
Ví dụ số đối tượng thực tế trở thành
đối tượng chương trình
²Các cấu trúc liệu:
n Ngăn xếp n Hàngđợi
n Danh sách liên kết n Cây nhịphân
²Nhân sự:
n Nhân viên n Sinh viên n Khách hàng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 18
1
Đố
i t
ượ
ng (ti
ế
p)
Ví d
ụ
v
ề
m
ộ
t s
ố đố
i t
ượ
ng th
ự
c t
ế
có th
ể
tr
ở
thành
đố
i t
ượ
ng ch
ươ
ng trình.
²
Các t
ệ
p d
ữ
li
ệ
u:
n Một file nhân n Một từ điển
²
Các ki
ể
u d
ữ
li
ệ
u c
ủ
a ng
ườ
i s
ử
d
ụ
ng:
n Thời gian n Các sốphức
n Các điểm mặt phẳng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 19
1
Đố
i t
ượ
ng (ti
ế
p)
Ví d
ụ
v
ề
m
ộ
t s
ố đố
i t
ượ
ng th
ự
c t
ế
có th
ể
tr
ở
thành
đố
i t
ượ
ng ch
ươ
ng trình.
²
Các thành ph
ầ
n trị ch
ơ
i:
n Các viên bi trò chơi Line
n Các quân cờ trò chơi cờ tướng, cờvua n …
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 20
1
Đố
i t
ượ
ng (ti
ế
p)
²
M
ộ
t câu h
ỏ
i
đặ
t các
đố
i t
ượ
ng th
ự
c t
ế
tr
ở
thành các
đố
i t
ượ
ng ch
ươ
ng trình thì
cái d
ữ
li
ệ
u, hàm thành viên c
ủ
a
đố
i t
ượ
ng?
n Các đối tượng thực tế thường có trạng thái
khả Trạng thái tính chất đối tượng mà thay đổi Khả mà đối tượng làm
n Khi trở thành đối tượng chương trình
liệu lưu trạng thái cịn hàm thành viên
(6)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 21
1
Đố
i t
ượ
ng (ti
ế
p)
²Ví dụmột đối tượng thang máy liệu là:
n Tầng
n Sốlượng hành khách n Các nútấn
Các hàm thành viên là:
n DiXuong() n DiLen() n MoCua() n DongCua() n LayTTin()
n TinhTangSeToi()
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 22
2 L
ớ
p (class)
²
M
ộ
t l
ớ
p
đố
i t
ượ
ng (g
ọ
i t
ắ
t l
ớ
p) m
ộ
t mô
t
ả
v
ề
m
ộ
t s
ố đố
i t
ượ
ng t
ươ
ng t
ự
nhau Nó xác
đị
nh d
ữ
li
ệ
u hàm s
ẽ
có trong
các
đố
i t
ượ
ng c
ủ
a l
ớ
p
đ
ó.
²
Khái ni
ệ
m l
ớ
p l
ậ
p trình h
ướ
ng
đố
i
t
ượ
ng gi
ố
ng khái ni
ệ
m l
ớ
p sinh h
ọ
c Ví
d
ụ
: cá chép, cá trôi, cá mè
đề
u thu
ộ
c l
ớ
p cá.
²
N
ế
u so sánh v
ớ
i ki
ể
u d
ữ
li
ệ
u l
ớ
p
gi
ố
ng nh
ư
ki
ể
u d
ữ
li
ệ
u, còn
đố
i t
ượ
ng gi
ố
ng
nh
ư
các bi
ế
n c
ủ
a ki
ể
u
đ
ó.
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 23
2 L
ớ
p (ti
ế
p)
²
M
ộ
t
đố
i t
ượ
ng
đượ
c g
ọ
i m
ộ
t th
ể
hi
ệ
n
(instance) c
ủ
a m
ộ
t l
ớ
p b
ở
i vì
đố
i t
ượ
ng là
m
ộ
t tr
ườ
ng h
ợ
p c
ụ
th
ể
c
ủ
a mô t
ả
l
ớ
p Vì d
ữ
li
ệ
u các
đố
i t
ượ
ng c
ủ
a m
ộ
t l
ớ
p là
khác nên d
ữ
li
ệ
u c
ủ
a l
ớ
p c
ũ
ng
đượ
c g
ọ
i
là d
ữ
li
ệ
u th
ự
c th
ể
(instance data).
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 24
3 S
ự
k
ế
th
ừ
a (inheritance)
²Trong sống ta thấy lớp lại chia thành lớp Chẳng hạn lớp động vật chia thành cá, chim, động vật có vú ; lớp xe cộ chia thành xe con, xe buýt, xe tải, xe máy,
²Nguyên tắc phân chia thành lớp lớp có đặc điểm giống với lớp mà tách Ví dụ: xe con, xe tải, xe buýt xe máy, tất
đều có tay lái, động cơ, dùng để vận chuyển người hàng hoá Đây đặc điểm xe cộ Ngoài đặc điểm này, lớp cịn có cácđặc
(7)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 25
3 S
ự
k
ế
th
ừ
a (ti
ế
p)
²
Trong l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng m
ộ
t l
ớ
p có
th
ể
làm c
ơ
s
ở
cho m
ộ
t ho
ặ
c nhi
ề
u l
ớ
p con
khác M
ộ
t l
ớ
p nh
ư
v
ậ
y g
ọ
i l
ớ
p c
ơ
s
ở
.
Các l
ớ
p mà
đượ
c
đị
nh ngh
ĩ
a có các
đặ
c
đ
i
ể
m c
ủ
a l
ớ
p c
ơ
s
ở
nh
ư
ng thêm vào các
đặ
c
đ
i
ể
m m
ớ
i c
ủ
a riêng g
ọ
i l
ớ
p d
ẫ
n
xu
ấ
t Nh
ư
v
ậ
y, l
ớ
p d
ẫ
n xu
ấ
t k
ế
th
ừ
a
nh
ữ
ng
đặ
c
đ
i
ể
m c
ủ
a l
ớ
p c
ơ
s
ở
.
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 26
3 K
ế
th
ừ
a (ti
ế
p)
Đặc điểm A Đặc điểm B
Đặc điểm A Đặc điểm B
Đặc điểm A Đặc điểm B
Đặc điểm A Đặc điểm B Đặc điểm C
Đặc điểm D Đặc điểm E
Đặc điểm F
Lớp sở
Lớp dẫn xuất
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 27
4 S
ự
s
ử
d
ụ
ng l
ạ
i (Reusability)
²Khi lớp viết hồn hảo bán cho người lập trình khác để sử dụng chương trình riêng họ Việc gọi sử dụng lại
²Việc sử dụng lại tương tự việc sử dụng thư viện hàm lập trình cấu trúc Tuy nhiên, lập trình hướng đối tượng, nhờ có kế thừa mà ý tưởng sử dụng lại mở rộng nhiều Người lập trình lấy lớp có, thêm đặc
điểm khả cho mà khơng cần thay đổi
Để làm điều người lập trình đơn giản tạo lớp dẫn xuất kế thừa toàn đặc
điểm lớp có cịn thêm vào đặc
điểm
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 28
4 S
ự
s
ử
d
ụ
ng l
ạ
i (Ti
ế
p)
²
Ví d
ụ
: gi
ả
s
ử
ta
đ
ã vi
ế
t (ho
ặ
c mua) m
ộ
t l
ớ
p t
ạ
o
h
ệ
th
ố
ng menu L
ớ
p menu r
ấ
t t
ố
t ta
không mu
ố
n thay
đổ
i nó, nh
ư
ng ta l
ạ
i mu
ố
n
làm cho m
ộ
t s
ố
m
ụ
c menu nh
ấ
p nháy.
Để
làm
đượ
c
đ
i
ề
u ta ch
ỉ đơ
n gi
ả
n t
ạ
o m
ộ
t l
ớ
p
d
ẫ
n xu
ấ
t k
ế
th
ừ
a t
ấ
t c
ả
các kh
ả
n
ă
ng c
ủ
a l
ớ
p
đ
ã
có nh
ư
ng có thêm m
ụ
c menu nh
ấ
p nháy.
(8)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 29
5 S
ự
đ
a hình ch
ồ
ng hàm
(polymorphism and overloading)
²
Trong l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng ta có th
ể
s
ử
d
ụ
ng hàm toán t
ử
theo nhi
ề
u cách
khác tùy thu
ộ
c vào nh
ữ
ng mà chúng
tác
độ
ng.
Đ
ây g
ọ
i s
ự đ
a hình.
²
S
ự đ
a hình có th
ể
th
ự
c hi
ệ
n theo hai cách:
n Đa hình thời điểm biên dịch thơng qua việc
chồng hàm chồng tốn tử
n Đa hình thời điểm chạy chương trình thơng qua
việc sử dụng hàm ảo
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 30
5 S
ự
đ
a hình ch
ồ
ng hàm (ti
ế
p)
²Chồng hàm cho phép có nhiều hàm trùng tên có đối số khác Chồng toán tử cho phép sử dụng tốn tử có (chẳng hạn +, -) tác
động kiểu liệu người lập trình
định nghĩa Khi hàm hay tốn tử gọi trình biên dịch biết cách chọn hàm, toán tử nàođể thực
²Trường hợp lớp dẫn xuất lớp sở có hàm thành viên giống hệt gọi hàm thành viên trình biên dịch khơng xác định gọi hàm nào, hàm lớp sở hay lớp dẫn xuất Chỉ đến chạy chương trình biết hàm gọi dựa vào kiểuđối tượng gọi hàm
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 31
6 Che gi
ấ
u thông tin
²
Trong LTHDT ng
ườ
i ta phân bi
ệ
t hai công
vi
ệ
c: th
ứ
nh
ấ
t công vi
ệ
c t
ạ
o l
ớ
p
đố
i
t
ượ
ng (class creators), th
ứ
hai công vi
ệ
c s
ử
d
ụ
ng l
ớ
p
đố
i t
ượ
ng này.
²
Khi t
ạ
o l
ớ
p, ng
ườ
i t
ạ
o l
ớ
p s
ẽ
xác
đị
nh nh
ữ
ng
gì cho phép ng
ườ
i s
ử
d
ụ
ng l
ớ
p truy nh
ậ
p,
ph
ầ
n l
ạ
i
đượ
c che gi
ấ
u không cho
ng
ườ
i s
ử
d
ụ
ng l
ớ
p quy
ề
n truy nh
ậ
p.
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 32
6 Che gi
ấ
u d
ữ
li
ệ
u (ti
ế
p)
²
Kh
ả
n
ă
ng che gi
ấ
u d
ữ
li
ệ
u cho phép
nh
ữ
ng ng
ườ
i t
ạ
o l
ớ
p có th
ể
thay
đổ
i hay
đị
nh ngh
ĩ
a l
ạ
i l
ớ
p mà v
ẫ
n ch
ắ
c ch
ắ
n r
ằ
ng
khơng
ả
nh h
ưở
ng t
ớ
i ch
ươ
ng trình c
ủ
a
nh
ữ
ng ng
ườ
i s
ử
d
ụ
ng l
ớ
p này.
²
C++ s
ử
d
ụ
ng t
ừ
khóa sau
để
xác
đị
nh kh
ả
n
ă
ng truy nh
ậ
p thơng tin d
ữ
li
ệ
u t
ừ
bên
ngồi l
ớ
p:
(9)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 33
7 Truy
ề
n thơng
đ
i
ệ
p
²Chương trình hướng đối tượng bao gồm tập
đối tượng mối quan hệ đối tượng với
²Các đối tượng gửi nhận thông tin với giống người trao đổi với Chính nguyên lý trao đổi thông tin cách truyền thông điệp giúp dễ dàng xây dựng hệ thống mô tả đẩy
đủ, trung thực hệ thống thực tế Truyền thông
điệp cho đối tượng tức báo cho phải thực việc Cách đáp ứng đối tượng
được mô tả qua hàm thành viên đối tượng
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 34
7 Truy
ề
n thông
đ
i
ệ
p (ti
ế
p)
²
Thông
đ
i
ệ
p truy
ề
n
đ
i ph
ả
i ch
ỉ
ra
đượ
c tên
đố
i
t
ượ
ng nh
ậ
n thông
đ
i
ệ
p, tên hàm c
ầ
n th
ự
c hi
ệ
n
và thông tin truy
ề
n
đ
i C
ấ
u trúc m
ộ
t thông
đ
i
ệ
p nh
ư
sau:
Tên_
đố
i_t
ượ
ng.Tên_hàm(
Đố
i_s
ố
)
Đối tượng Thông báo Thông tin
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 35
III Các ngơn ng
ữ
l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng
²
T
ư
t
ưở
ng l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng có th
ể
cài
đặ
t nhi
ề
u ngơn ng
ữ
l
ậ
p trình khác nhau
nh
ư
C, Pascal Tuy nhiên, n
ế
u s
ử
d
ụ
ng nh
ữ
ng
ngôn ng
ữ
không ph
ả
i ngôn ng
ữ
h
ướ
ng
đố
i
t
ượ
ng s
ẽ
g
ặ
p r
ấ
t nhi
ề
u khó kh
ă
n, nh
ấ
t là
v
ớ
i nh
ữ
ng ch
ươ
ng trình l
ớ
n ph
ứ
c t
ạ
p.
Nh
ữ
ng ngơn ng
ữ đượ
c thi
ế
t k
ế để
h
ỗ
tr
ợ
cho
vi
ệ
c mô t
ả
, cài
đặ
t khái ni
ệ
m c
ủ
a ph
ươ
ng
pháp l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng g
ọ
i chung là
ngơn ng
ữ
h
ướ
ng
đố
i t
ượ
ng.
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 36
III Các ngôn ng
ữ
l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
²Các ngơn ngữ lập trình gọi ngơn ngữ hướng
đối tượng phải có đặc điểm sau:
n Bao gói thơng tin: đưa liệu hàm thao tác dữliệuđó vào cấu trúc (gọi lớp)
n Cơchếche giấu dữliệu
n Tự động tạo lập xóa bỏcácđối tượng n Sựkếthừa
n Sự đa hình (chồng hàm, chồng tốn tửvà liên kếtđộng)
²C++, Smalltalk, Object Pascal,… ngôn ngữ
(10)Bài giảng LTHDT-Phần 2, Chương 10 GV Ngơ Cơng Thắng 37
IV Phân tích thi
ế
t k
ế
theo h
ướ
ng
đố
i t
ượ
ng
Các bước phân tích hướng đối tượng:Bước 1: Tìm hiểu tốn
Bước 2: Xác định rõ đặc tả yêu cầu người sử dụng, hệ thống phần mềm
Bước 3: Xác định đối tượng thuộc tính chúng Từ thuộc tính suy liệu đối tượng Bước 4: Xác định hàm mà đối tượng phải thực (hành vi đối tượng)
Bước 5: Xác định mối quan hệ tương tác đối tượng
Bước 6: Thiết kế lớp theo ký pháp UML
Bài giảng LTHDT-Phần 2, Chương 10 GV Ngô Công Thắng 38
Quá trình phân tích hướng đối tượng thể qua sơ đồ sau:
Xây dựng
đặc tả yêu cầu Phát biểu
bài toán
Xác định lớp đối tượng Xác định
các hàm
Mối quan hệ đối tượng
Thiết kế
V- Các công việc LTHĐT
1)
T
ạ
o l
ớ
p: Khai báo l
ớ
p => Khai báo bi
ế
n
và khai báo hàm thành viên
2)
S
ử
d
ụ
ng l
ớ
p: T
ạ
o
đố
i t
ượ
ng c
ủ
a l
ớ
p =>
t
ươ
ng tác v
ớ
i
đố
i t
ượ
ng cho các
đố
i
t
ượ
ng t
ươ
ng tác v
ớ
i nhau.
(11)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
Ch
ươ
ng 11 L
ớ
p
đố
i t
ượ
ng c
ủ
a l
ớ
p
I Mô t
ả
l
ớ
p (khai báo l
ớ
p)
II T
ạ
o t
ươ
ng tác v
ớ
i các
đố
i t
ượ
ng
III Các thành viên t
ĩ
nh c
ủ
a l
ớ
p (static member)
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
I Mô t
ả
l
ớ
p (khai báo l
ớ
p)
1 Cú pháp mô tả lớp (khai báo lớp) Từ khóa public, private, protected Khai báo liệu lớp
4 Khai báo định nghĩa hàm thành viên lớp
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
1 Cú pháp mô t
ả
l
ớ
p (
đị
nh ngh
ĩ
a l
ớ
p)
class Tên_l
ớ
p
{
private:
public:
};
²Tên_lớpđặt theo quy tắc đặt tên
²Mô tả lớp đặt trước hàm main() để file header
Dấu chấm phẩy
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
2 T
ừ
khóa public, private, protected
²Khi định nghĩa lớp ta quy định quyền truy nhập thành phần lớp từ khóa public, private
và protected Theo sau từ khóa dấu
chấm
²Phần lớp nằm sau từ khóa private: truy nhập từ bên lớp, tức có thành viên lớp có quyền truy nhập Trong C++, khơng sử dụng từ khóa private mặc định private
(12)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngơ Cơng Thắng
2 T
ừ
khóa public, private, protected (ti
ế
p)
²
Ph
ầ
n c
ủ
a l
ớ
p n
ằ
m sau t
ừ
khóa protected: có
th
ể
truy nh
ậ
p t
ừ
bên l
ớ
p t
ừ
các l
ớ
p
d
ẫ
n xu
ấ
t.
²
Thông th
ườ
ng ng
ườ
i ta th
ườ
ng
để
t
ấ
t c
ả
d
ữ
li
ệ
u private
để
che gi
ấ
u d
ữ
li
ệ
u, tránh
nh
ữ
ng thay
đổ
i vơ tình làm h
ỏ
ng d
ữ
li
ệ
u Tuy
nhiên, hàm thành viên nên
để
là public
sao cho ph
ầ
n khác c
ủ
a ch
ươ
ng trình có
th
ể
g
ọ
i chúng
để
b
ả
o
đố
i t
ượ
ng làm gì
đấ
y.
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
3 Khai báo d
ữ
li
ệ
u c
ủ
a l
ớ
p
²Khai báo liệu lớp khai báo biến để lưu trữ thuộc tính đối tượng
²Việc khai báo biến lớp không tạo ô nhớ Nó đơn giản báo cho trình biên dịch biết tên biến kích thước nhớ cần đối tượng
được tạo Khi khai báo biến lớp ta không khởi tạo giá trị cho biến chưa có nhớ Ví dụ:
private: int x,y;
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
4 Khai báo
đị
nh ngh
ĩ
a
các hàm thành viên c
ủ
a l
ớ
p
²Các hàm thành viên lớp khai báo định nghĩa giống hàm thông thường
²Ta định nghĩa hàm thành viên mô tả lớp không cần khai báo hàm Thơng thường với hàm thành viên nhỏ (chỉ có vài dịng lệnh) người ta định nghĩa mơ tả lớp Bởi ta định nghĩa hàm thành viên mô tả lớp mặc định hàm inline Hàm inline khác hàm hàm bình thường chỗ: dịch chương trình, trình biên dịch khơng để mã hàm vùng nhớ riêng mà chèn vào vị trí lời gọi hàm Bởi vậy, để hàm inline lớn làm tăng kích thước chương trình
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
4 Khai báo
đị
nh ngh
ĩ
a
các hàm thành viên c
ủ
a l
ớ
p (ti
ế
p)
(13)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng
4 Khai báo
đị
nh ngh
ĩ
a
các hàm thành viên c
ủ
a l
ớ
p (ti
ế
p)
² Cú phápđịnh nghĩa hàm thành viên bên ngồi mơ tảlớp nhưsau: class Ten_lop
{
private: public:
KieuTen_ham(); };
KieuTen_lop::Ten_ham() {
//Cac lenh cua ham }
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 10
Ví d
ụ
v
ề
l
ớ
p
Lớpđối tượng thời gian lưu trữgiờvà phútclass airtime {
private:
int hours; //Tu den 23 int minutes; //Tu den 59 public:
void set(); //Khai bao ham vien void display() //Ham inline
{
cout<<hours<<':'<<minutes; }
};
void airtime::set() {
char kt; //Dung de chua dau hai cham
cout<<"Nhap vao thoi gian (dang 20:45): "; cin>>hours>>kt>>minutes;
}
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 11
II T
ạ
o t
ươ
ng tác v
ớ
i
đố
i t
ượ
ng
1 T
ạ
o các
đố
i t
ượ
ng c
ủ
a m
ộ
t l
ớ
p
2 G
ử
i thông báo t
ớ
i các
đố
i t
ượ
ng
3 M
ả
ng
đố
i t
ượ
ng
4 Con tr
ỏ
tr
ỏ
t
ớ
i
đố
i t
ượ
ng
5 L
ệ
nh gán
đố
i t
ượ
ng
6 Truy nh
ậ
p d
ữ
li
ệ
u c
ủ
a các
đố
i t
ượ
ng l
ớ
p
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 12
1 T
ạ
o
đố
i t
ượ
ng c
ủ
a m
ộ
t l
ớ
p
²
Vi
ệ
c t
ạ
o l
ớ
p ch
ỉ
là t
ạ
o b
ả
n thi
ế
t k
ế để
sau t
ạ
o các
đố
i t
ượ
ng.
²
Cú pháp t
ạ
o các
đố
i t
ượ
ng gi
ố
ng cú pháp t
ạ
o
các bi
ế
n (khai báo bi
ế
n).
Tên_l
ớ
p Tên_
đố
i_t
ượ
ng;
²
Trong C++, các
đố
i t
ượ
ng
đượ
c
đố
i x
ử
nh
ư
các bi
ế
n, l
ớ
p
đượ
c
đố
i x
ử
nh
ư
các
ki
ể
u d
ữ
li
ệ
u.
(14)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 13
2 G
ử
i thông
đ
i
ệ
p t
ớ
i
đố
i t
ượ
ng
²
Khi m
ộ
t
đố
i t
ượ
ng
đượ
c t
ạ
o ta có th
ể
t
ươ
ng tác v
ớ
i b
ằ
ng cách s
ử
d
ụ
ng hàm
hành viên Vi
ệ
c g
ọ
i hàm thành viên c
ủ
a m
ộ
t
đố
i t
ượ
ng g
ọ
i g
ử
i thông
đ
i
ệ
p t
ớ
i
đố
i t
ượ
ng
đ
ó.
²
Cú pháp g
ử
i thơng báo t
ớ
i m
ộ
t
đố
i t
ượ
ng:
Tên_
đố
i_t
ượ
ng.Tên_hàm();
Ví d
ụ
:
t1.display();
Sau
đ
ây m
ộ
t ch
ươ
ng trình hồn ch
ỉ
nh v
ề
vi
ệ
c t
ạ
o l
ớ
p các
đố
i t
ượ
ng c
ủ
a l
ớ
p.
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 14
3 M
ả
ng
đố
i t
ượ
ng
²Bởi C++ đối xử với đối tượng biến nên ta khai báo mảng đối tượng Mảng đối tượng hữu ích muốn tạo số lượng lớn đối tượng lớp Ví dụ: ta có lớp nhân viên ta muốn tạo 500 đối tượng cho 500 nhân viên cách tốt tạo mảng 500đối tượng nhân viên
²Cú pháp tạo mảng đối tượng giống cú pháp khai báo biến mảng:
Tên_lớp Tên_mảng_đối_tượng[Số_đối_tượng]; Dữ liệu đối tượng mảng lưu trữ liên tiếp bộnhớ
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 15
3 M
ả
ng
đố
i t
ượ
ng (ti
ế
p)
²
Để
g
ử
i th
ố
ng báo t
ớ
i m
ộ
t
đố
i t
ượ
ng c
ụ
th
ể
trong
m
ả
ng
đố
i t
ượ
ng ta ph
ả
i dùng thêm ký hi
ệ
u c
ủ
a
m
ả
ng
để
xác
đị
nh
đố
i t
ượ
ng mu
ố
n g
ử
i th
ố
ng
báo t
ớ
i Ví d
ụ
:
airtime at[20];
at[2].display();
L
ệ
nh g
ử
i th
ố
ng báo t
ớ
i
đố
i t
ượ
ng th
ứ
3
trong m
ả
ng
đố
i t
ượ
ng at.
Ch
ươ
ng trình v
ề
m
ả
ng
đố
i t
ượ
ng th
ờ
i gian
airtime.
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 16
4 Con trỏ trỏ tới đối tượng
²Các đối tượng lưu trữ nhớ nên chúng có địa Bởi vậy, trỏ trỏ tới
đối tượng giống trỏtới biến kiểu
²Cú pháp khai báo biến trỏ trỏ tới đối tượng sau:
Tên_lớp *Tên_con_trỏ;
Ví dụ: airtime *p;
//p trỏtới đối tượng lớp airtime
²Để đưa địa đối tượng vào biến trỏ ta dùng toán tửlấyđịa &
Ví dụ: airtime t1; //tạođối tượng t1
(15)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 17
4 Con tr
ỏ
tr
ỏ
t
ớ
i
đố
i t
ượ
ng (ti
ế
p)
²
Để
truy nh
ậ
p t
ớ
i thành viên c
ủ
a
đố
i t
ượ
ng
do tr
ỏ
p tr
ỏ
t
ớ
i ta có cách:
n Sử dụng tốn tử truy nhập gián tiếp toán tử dấu
chấm: (*p).Thành_viên Ví dụ: (*p).display();
n Sử dụng tốn tử truy nhập thành viên -> (gồm dấu
trừ dấu lớn liền nhau): p->Thành_viên Ví dụ: p->display();
Cách th
ứ
hai g
ọ
n h
ơ
n cách nh
ấ
t V
ớ
i tr
ỏ
tr
ỏ
t
ớ
i
đố
i t
ượ
ng ng
ườ
i ta hay dùng cách th
ứ
hai.
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 18
5 L
ệ
nh gán
đố
i t
ượ
ng
²Với biến kiểu ta gán giá trị biến cho biến kiểu Vậy gán giá trị đối tượng cho đối tượng không? Câu trả lời có, C++ coi đối tượng biến
²Nhưng đối tượng bao gồm liệu hàm thành viên, gán đối tượng cho đối tượng khác trình biên dịch làm nào? Trình biên dịch copy mục liệu, không copy hàm thành viên Bởi tất đối tượng lớp có hàm thành viên giống Trong nhớ có hàm thành viên, đối tượng sử dụng chung hàm thành viên Các hàm thành viên tác động liệu đối tượng gọi
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 19
5 L
ệ
nh gán
đố
i t
ượ
ng (ti
ế
p)
Đối tượngDữ liệu Dữ liệu
Dữ liệu Dữ liệu
Dữ liệu Dữ liệu
Hàm
Hàm
Đối tượng Đối tượng
Đối tượng lưu trữ nhớ
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 20
5 L
ệ
nh gán
đố
i t
ượ
ng (ti
ế
p)
²
Ví d
ụ
: gi
ả
s
ử
t1, t2 hai
đố
i t
ượ
ng th
ờ
i gian
airtime, sau l
ấ
y giá tr
ị
gi
ờ
và phút cho t1
ta gán t1 cho t2.
airtime t1, t2;
t1.set();
t1.display();
t2 = t1;
t2.display();
(16)Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 21
6 Truy nh
ậ
p d
ữ
li
ệ
u c
ủ
a
đố
i t
ượ
ng l
ớ
p
²
Các hàm thành viên có th
ể
truy nh
ậ
p tr
ự
c ti
ế
p
d
ữ
li
ệ
u private c
ủ
a các
đố
i t
ượ
ng l
ớ
p.
²
Bài tốn:
Tính t
ổ
ng hai s
ố
ph
ứ
c.
²
BTVN: Tính t
ổ
ng hai phân s
ố
.
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 22
III Các thành viên t
ĩ
nh c
ủ
a l
ớ
p (static member)
1 D
ữ
li
ệ
u thành viên t
ĩ
nh
2 Hàm thành viên t
ĩ
nh
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 23
1 D
ữ
li
ệ
u thành viên t
ĩ
nh
²
D
ữ
li
ệ
u riêng g
ắ
n v
ớ
i m
ộ
t
đố
i t
ượ
ng c
ụ
th
ể
.
Chúng t
ồ
n t
ạ
i khi
đố
i t
ượ
ng
đượ
c t
ạ
o m
ấ
t
đ
i khi
đố
i t
ượ
ng b
ị
h
ủ
y Nh
ư
ng n
ế
u chúng ta
c
ầ
n m
ộ
t bi
ế
n mà có th
ể
dùng cho c
ả
l
ớ
p
đố
i
t
ượ
ng ch
ứ
không ph
ả
i cho m
ộ
t
đố
i t
ượ
ng c
ụ
th
ể
thì làm th
ế
nào? Có th
ể
chúng ta s
ẽ
ngh
ĩ
t
ớ
i bi
ế
n ngoài, nh
ư
ng bi
ế
n ngồi l
ạ
i
khơng g
ắ
n v
ớ
i m
ộ
t l
ớ
p c
ụ
th
ể
và có nhi
ề
u v
ấ
n
đề
khơng t
ố
t D
ữ
li
ệ
u thành viên t
ĩ
nh s
ẽ
gi
ả
i
quy
ế
t
đượ
c v
ấ
n
đề
này.
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 24
1 D
ữ
li
ệ
u thành viên t
ĩ
nh (ti
ế
p)
Dữ liệu thực thể liệu tĩnh Dữ liệu
riêng Dữ liệu
Đối tượng Đối tượng
Dữ liệu
Dữ liệu riêng Dữ liệu Dữ liệu
Dữ liệu riêng Dữ liệu Dữ liệu
Dữ liệu chung Dữ liệu Dữ liệu
(17)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 25
1 D
ữ
li
ệ
u thành viên t
ĩ
nh (ti
ế
p)
²Để có liệu thành viên tĩnh ta phải dùng hai lệnh: lệnh khai báo biến nằm mô tả lớp, lệnh định nghĩa biến nằm ngồi mơ tả lớp Ví dụ: class aclass
{
private:
static int a; //Khai bao vien tinh
};
int aclass::a=100; //Dinh nghia, khoi tao = 100
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 26
1 D
ữ
li
ệ
u thành viên t
ĩ
nh (ti
ế
p)
²
D
ữ
li
ệ
u thành viên t
ĩ
nh có th
ể đượ
c kh
ở
i t
ạ
o
khi
đị
nh ngh
ĩ
a N
ế
u ta khơng kh
ở
i t
ạ
o thì
chúng
đượ
c t
ự độ
ng kh
ở
i t
ạ
o b
ằ
ng 0.
²
Ta có th
ể
truy nh
ậ
p d
ữ
li
ệ
u thành viên t
ĩ
nh t
ừ
b
ấ
t k
ỳ
hàm thành viên thông th
ườ
ng Tuy
nhiên, ng
ườ
i ta th
ườ
ng dùng m
ộ
t lo
ạ
i hàm
đặ
c bi
ệ
t dành cho c
ả
l
ớ
p
để
truy nh
ậ
p d
ữ
li
ệ
u
thành viên t
ĩ
nh Hàm g
ọ
i hàm t
ĩ
nh
(static function).
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 27
2 Hàm thành viên t
ĩ
nh
²Việc khai báo định nghĩa hàm thành viên tĩnh giống hàm thành viên thông thường khác dùng thêm từ khóa static
²Lời gọi hàm thành viên tĩnh không giống lời gọi hàm thành viên thông thường Lời gọi hàm thành viên tĩnh không gắn với đối tượng mà gắn với tên lớp toán tử quy định phạm vi: tên_lớp::tên_hàm_tĩnh
²Hàm thành viên tĩnh truy nhập liệu tĩnh, chúng khơng biết đối tượng lớp Thậm chí ta gọi hàm thành viên tĩnh trước tạo đối tượng lớp
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 28
2 Hàm thành viên t
ĩ
nh (ti
ế
p)
class aclass {
private: public:
static void stafunc(); //Khai bao };
void main() {
aclass::stafunc(); //Goi ham vien tinh }
void aclass::stafunc() //Dinh nghia {
(18)Bài tập chương 11
Bài Viết chương trình nhập vào thời gian có
và phút Tính đưa hình thời gian sau n
phút nhập vào từ bàn phím
Bài Viết chương trình nhập vào n số phức Đưa sốphức nhập hình Yêu cầu chương trình phải tạođối tượng động
Bài Nhập thông tin số cán Mỗi cán có thơng tin mã cán bộ, tên Mã cán số thứ tự cán bộ, lấy tự động Đưa hình thơng tin cán bộvà tổng sốcán nhập
Bài giảng LTHDT-Phần 2, Chương 11 GV Ngô Công Thắng 29
Bài tập chương 11
Bài Vi
ế
t ch
ươ
ng trình nh
ậ
p vào danh sách
sinh viên cho t
ớ
i khơng mu
ố
n nh
ậ
p thì
thơi, m
ỗ
i sinh viên có thông tin v
ề
mã sinh
viên, tên và
đ
i
ể
m tbc Mã SV s
ố
nguyên
đượ
c l
ấ
y t
ự độ
ng có giá tr
ị
t
ừ
11 tr
ở
đ
i.
Đư
a hình s
ố
l
ượ
ng danh sách
sinh viên
đ
ã nh
ậ
p u c
ầ
u ch
ươ
ng
trình có s
ử
d
ụ
ng bi
ế
n t
ĩ
nh hàm t
ĩ
nh, s
ử
d
ụ
ng
đố
i t
ượ
ng
độ
ng.
(19)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
Ch
ươ
ng 12 Ch
ồ
ng hàm (function overloading)
I Ch
ồ
ng hàm
II Các lo
ạ
i bi
ế
n
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
I Ch
ồ
ng hàm (function overloading)
1 S
ự
c
ầ
n thi
ế
t ph
ả
i ch
ồ
ng hàm
2 Trình biên d
ị
ch hàm ch
ồ
ng
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
1 S
ự
c
ầ
n thi
ế
t ph
ả
i ch
ồ
ng hàm
²
Bài t
ậ
p 1:
Vi
ế
t hàm tính trung bình c
ộ
ng c
ủ
a
m
ộ
t m
ả
ng int, long, float double.
n Với tập này, bình thường ta phải viết hàm
để tính trung bình cho mảng khác
gọi hàm ta phải nhớ tên hàm Tuy nhiên, C++ cho phép nhiều hàm có tên giống cần khác đối số Việc sử dụng tên cho nhiều hàm gọi chồng hàm Chồng hàm giúp người sử dụng nhớ nhiều tên hàm khác
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
2 Trình biên d
ị
ch hàm ch
ồ
ng
²
Làm th
ế
nào mà trình biên d
ị
ch có th
ể
phân
bi
ệ
t
đượ
c hàm có tên? Trình biên
d
ị
ch s
ẽ
t
ạ
o m
ộ
t tên m
ớ
i cho m
ỗ
i hàm b
ằ
ng
cách k
ế
t h
ợ
p tên hàm v
ớ
i tên ki
ể
u c
ủ
a các
đố
i
s
ố
.
Ví d
ụ
: tbc_int_int(), tbc_long_int()
²
Bài t
ậ
p v
ề
nhà:
n Viết chương trình tính bình phương số
int, long, float, double
n Làm để lấy địa hàm
(20)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
II Các lo
ạ
i bi
ế
n
1 Sự khác khai báo định nghĩa
2 Thời gian tồn phạm vi hoạtđộng loại biến
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
1 S
ự
khác gi
ữ
a khai báo
đị
nh ngh
ĩ
a
²Một khai báo (declaration) xác định tên kiểu liệu Nhiệm vụ khai báo cung cấp thơng tin cho trình biên dịch, khơng u cầu trình biên dịch làm việc
²Trái lại, định nghĩa (definition) yêu cầu trình biên dịch phải cấp phát bộnhớ cho biến
²Trong số trường hợp khai báo yêu cầu trình biên dịch cấp phát bộnhớ, chẳng hạn khai báo biến Tuy nhiên, với định nghĩa trường hợp yêu cầu cấp phát bộnhớ
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 2 Thời gian tồn phạm vi hoạt động loại biến
²Các loại biến có hai đặc tính phạm vi hoạt
động thời gian tồn Phạm vi hoạt động liên quan đến phần chương trình truy nhập (sử dụng) biến Thời gian tồn khoảng thời gian biến tồn Phạm vi hoạt động biến lớp, hàm, file hay số file Thời gian tồn biến trùng với mộtđối tượng, hàm hay toàn bộchương trình
²Có loại biến sau: biến tự động, biến ghi, biến khối lệnh, biến ngoài, biến tĩnh đối tượng
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
a) Các bi
ế
n t
ự
độ
ng (automatic variable)
²
Các bi
ế
n t
ự độ
ng bi
ế
n
đượ
c khai báo
trong m
ộ
t hàm S
ở
d
ĩ
g
ọ
i chúng bi
ế
n t
ự
độ
ng b
ở
i chúng
đượ
c t
ự độ
ng t
ạ
o hàm
đượ
c g
ọ
i b
ị
h
ủ
y hàm k
ế
t thúc.
n Biến tự động có phạm vi hoạt động
hàm Do đó, biến i khai báo hàm hoàn toàn khác với biến i khai báo hàm khác
n Mặc định biến tự động không khởi tạo,
bởi sau chúng hình thành
(21)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng
b) Các bi
ế
n ghi (register variable)
²Biến ghi loại biến tự động đặc biệt Nó
được đặt ghi CPU không
phải nhớ Việc truy nhập biến ghi nhanh biến thông thường Biến ghi có lợi dùng làm biến điều khiển cho lệnh lặp bên trong lệnh lặp lồng Ta nên dùng đến hai biến ghi hàm
²Để khai báo biến ghi ta dùng từ khóa register trước khai báo biến thơng thường
Ví dụ: register int a;
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 10
c) Các bi
ế
n kh
ố
i l
ệ
nh
²
Các bi
ế
n t
ự độ
ng có th
ể đượ
c khai báo
ở
b
ấ
t
k
ỳ đ
âu m
ộ
t hàm ho
ặ
c m
ộ
t kh
ố
i
l
ệ
nh Kh
ố
i l
ệ
nh ph
ầ
n ch
ươ
ng trình n
ằ
m
gi
ữ
a hai d
ấ
u ngo
ặ
c { }, ch
ẳ
ng h
ạ
n nh
ư
thân l
ệ
nh if hay thân l
ệ
nh l
ặ
p Các bi
ế
n
đượ
c
khai báo m
ộ
t kh
ố
i l
ệ
nh có ph
ạ
m vi ho
ạ
t
độ
ng ch
ỉ
trong kh
ố
i l
ệ
nh
đ
ó.
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 11
d) Các bi
ế
n (external variable)
²
Các bi
ế
n bi
ế
n
đượ
c khai báo
ở
bên t
ấ
t c
ả
các hàm l
ớ
p Các bi
ế
n
ngoài có ph
ạ
m vi ho
ạ
t
độ
ng t
ừ
v
ị
trí khai báo
đế
n cu
ố
i file khai báo chúng Th
ờ
i gian t
ồ
n
t
ạ
i c
ủ
a bi
ế
n th
ờ
i gian t
ồ
n t
ạ
i c
ủ
a
ch
ươ
ng trình, t
ứ
c ch
ươ
ng trình k
ế
t thúc
thì bi
ế
n ngồi m
ớ
i b
ị
h
ủ
y Khác v
ớ
i các
bi
ế
n t
ự độ
ng, bi
ế
n ngoài
đượ
c t
ự độ
ng
kh
ở
i t
ạ
o b
ằ
ng n
ế
u ta không kh
ở
i t
ạ
o.
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 12
d) Các bi
ế
n (
ti
ế
p
)
//Bat dau file
int a; //a la bien ngoai
class aclass {
};
void afunc();
(22)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 13
d) Các bi
ế
n ngồi (
ti
ế
p
)
²Nếu chương trình chia thành nhiều file biến ngồi dùng file khai báo chúng, không dùngđược file khác Đểcác file khác sử dụng biến
định nghĩa file ta phải khai báo biến dùng từ khóa extern
²Đểcác biến ngồi truy nhậpđược file khai báo chúng, không truy nhập từ file khác ta dùng từ khóa static Trong ngữ cảnh này, từ khóa static có nghĩa hạn chế phạm vi hoạt động biến
Ví dụ: (trang sau)
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Cơng Thắng 14
d) Các bi
ế
n ngồi (
ti
ế
p
)
Ví dụ1: Truy nhập biến ngồi nhiều file //Bat dau file
int a; //a la bien ngoai //Cuoi file
//Bat dau file
extern int a; //khai bao su dung bien ngoai a o file //Trong file co the truy nhap bien a
//Cuoi file //Bat dau file
//Khong khai bao su dung bien ngoai a nen file // khong the truy nhap bien a
//Cuoi file
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 15
d) Các bi
ế
n ngồi (
ti
ế
p
)
Ví dụ2: Hạn chế việc truy nhập biến //Bat dau file
static int a; //dinh nghia bien ngoai a
//bien a chi truy nhap duoc file //Cuoi file
//Bat dau file
extern int a; //Khong dung duoc khai bao //Cuoi file
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 16
d) Các bi
ế
n ngồi (
ti
ế
p
)
²
Có hai v
ấ
n
đề
khi s
ử
d
ụ
ng bi
ế
n ngồi:
n Vì biến ngồi truy nhập từ
hàm chương trình nên dễ bị thayđổi làm liệu
n Vì biến ngồi có phạm vi hoạt động
(23)Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 17
e) Các bi
ế
n t
ĩ
nh c
ụ
c b
ộ
(local static)
²
Các bi
ế
n t
ĩ
nh c
ụ
c b
ộ đượ
c s
ử
d
ụ
ng ta
mu
ố
n trì giá tr
ị
c
ủ
a m
ộ
t bi
ế
n khai báo
trong hàm gi
ữ
a l
ờ
i g
ọ
i hàm T
ứ
c khi
hàm k
ế
t thúc bi
ế
n t
ĩ
nh v
ẫ
n v
ẫ
n ch
ứ
a
giá tr
ị
, hàm
đượ
c g
ọ
i l
ầ
n l
ạ
i có th
ể
s
ử
d
ụ
ng giá tr
ị
này Ph
ạ
m vi ho
ạ
t
độ
ng c
ủ
a bi
ế
n
t
ĩ
nh c
ụ
c b
ộ
là hàm nh
ư
ng th
ờ
i gian t
ồ
n
t
ạ
i c
ủ
a su
ố
t th
ờ
i gian ch
ươ
ng trình ch
ạ
y.
²
Trong l
ậ
p trình h
ướ
ng
đố
i t
ượ
ng ng
ườ
i ta
khơng dùng bi
ế
n t
ĩ
nh m
ộ
t mà dùng
trong l
ớ
p
đố
i t
ượ
ng.
Bài giảng LTHDT-Phần 2, Chương 12 GV Ngô Công Thắng 18
f)
Đố
i t
ượ
ng
²Đối tượng C++ đối xử biến Các đối tượng tạo dạng biến tự động, biến ngồi,… khơng tạo dạng biến ghi
²Phạm vi hoạt động thành viên liệu riêng (được khai báo private) lớp đối tượng hàm thành viên lớp Còn phạm vi hoạt
động hàm thành viên (được khai báo public) tất hàm lớp chương trình
(24)Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
Ch
ươ
ng 13 Hàm t
ạ
o hàm h
ủ
y
(constructor & destructor)
I Giới thiệu hàm tạo hàm hủy I.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
I.1 Gi
ớ
i thi
ệ
u v
ề
hàm t
ạ
o hàm
h
ủ
y
l Hàm tạo hàm hủy hai hàm thành viên đặc biệt
đối tượng Hàm tạo thực tự động đối tượng tạo, hàm hủy tựđộng thực đối tượng bị hủy
l Chúng ta thường viết hàm tạo để khởi tạo đối tượng, viết hàm hủy để giải phóng nhớ cấp phát hàm tạo
l Dù người lập trình có viết hay khơng viết hàm tạo hàm hủy trình biên dịch tạo mã lệnh để tạo đối tượng, cấp phát nhớ cho thực số khởi tạo đó; tạo mã lệnh để giải phóng nhớ chiếm đối tượng thực nhiều hoạt động dọn dẹp khác đối tượng bị hủy
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
Ch
ươ
ng Hàm t
ạ
o hàm h
ủ
y
I Giới thiệu hàm tạo hàm hủyI.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
I.2 Hàm t
ạ
o hàm h
ủ
y ng
ườ
i
l
ậ
p trình vi
ế
t
l Người lập trình tự định nghĩa hàm tạo hàm hủy riêng
l Hàm tạo hàm hủy định nghĩa mô tả lớp Cả hai hàm khơng có kiểu trả về, kể kiểu void Hàm tạo có tên
trùng với tên lớp, hàm hủy có tên trùng với tên lớp có dấu ~ đứng trước
(25)Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
I.2 Hàm t
ạ
o hàm h
ủ
y ng
ườ
i
l
ậ
p trình vi
ế
t (ti
ế
p)
l Ta dùng hàm tạo để khởi tạo giá trị cho biến đối tượng Có cách khởi tạo:
l Dùng danh sách khởi tạo: danh sách khởi tạo nằm dòng với tên hàm tạo, bắt đầu dấu hai chấm, sau biến cần khởi tạo cách dấu chấm, giá trị khởi tạo đặt ngoặc đơn sau tên biến Ví dụ: giả sử lớp Alpha có biến nguyên a b, hàm tạo khởi tạo giá trị cho biến sau:
Alpha() : a(5), b(6) { }
l Dùng lệnh gán giá trị thân hàm tạo Cách áp dụng với số biến lớn biến mảng, đối tượng
l Ví dụ:
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
Ch
ươ
ng Hàm t
ạ
o hàm h
ủ
y
I Giới thiệu hàm tạo hàm hủyI.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
II.1 Hàm t
ạ
o hai
đố
i s
ố
l
Ví d
ụ
: Vi
ế
t l
ớ
p s
ố
ph
ứ
c có hàm t
ạ
o
không
đố
i s
ố
để
kh
ở
i t
ạ
o ph
ầ
n th
ự
c
ph
ầ
n
ả
o b
ằ
ng 0, có hàm t
ạ
o hai
đố
i s
ố
để
kh
ở
i t
ạ
o ph
ầ
n th
ự
c ph
ầ
n
ả
o b
ằ
ng
đố
i s
ố
, có m
ộ
t hàm h
ủ
y.
l
Bài t
ậ
p v
ề
nhà: Vi
ế
t m
ộ
t l
ớ
p Stack có th
ể
ch
ứ
a s
ố
nguyên Nh
ậ
p vào s
ố
nguyên d
ươ
ng,
đư
a s
ố
nh
ị
phân.
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
II.1 Hàm t
ạ
o hai
đố
i s
ố
(ti
ế
p)
l
Cú pháp “G
ọ
i” hàm t
ạ
o có hai
đố
i s
ố
: B
ở
i
vì hàm t
ạ
o
đượ
c th
ự
c hi
ệ
n t
ự
độ
ng nên ta
không th
ể
s
ử
d
ụ
ng l
ờ
i g
ọ
i hàm thơng
th
ườ
ng
để
truy
ề
n
đố
i s
ố
cho Vi
ệ
c
truy
ề
n
đố
i s
ố
cho hàm t
ạ
o
đượ
c th
ự
c hi
ệ
n
khi t
ạ
o
đố
i t
ượ
ng Giá tr
ị
c
ủ
a
đố
i s
ố
đượ
c
đặ
t ngo
ặ
c
đơ
n sau tên
đố
i
t
ượ
ng.
(26)Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng
Ch
ươ
ng Hàm t
ạ
o hàm h
ủ
y
I Giới thiệu hàm tạo hàm hủyI.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 10
II.2 Hàm t
ạ
o m
ặ
c
đị
nh
l Nếu ta không định nghĩa hàm tạo trình biên dịch tạo hàm tạo mặc định, hàm tạo đối số
l Tuy nhiên, ta tự định nghĩa hàm tạo, dù có đối số hay khơng có đối số trình biên dịch khơng tạo hàm tạo mặc định
l Bài tập 2: Nếu lớp airtime ta định nghĩa hàm tạo đối số khai báo sau sinh lỗi airtime t1, t2;
Hãy thay đổi lớp airtime để khai báo
đúng lớp có hàm tạo đối số
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 11
Ch
ươ
ng Hàm t
ạ
o hàm h
ủ
y
I Giới thiệu hàm tạo hàm hủyI.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 12
II.3 Hàm t
ạ
o m
ộ
t
đố
i s
ố
l Hàm tạo đối số có vai trị quan trọng lập trình hướng đối tượng Nó dùng để chuyển đổi đối tượng lớp sang lớp khác Việc chuyển đổi thường dùng với lớp biểu diễn kiểu liệu Chính lý mà hàm tạo gọi hàm chuyển đổi
l Để thấy cách khai báo sử dụng hàm tạo đối số ta xét ví dụ sau: Giả sử lớp
(27)Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 13
II.3 Hàm t
ạ
o m
ộ
t
đố
i s
ố
(ti
ế
p)
class TypeA {
public:
TypeA(int i) //Ham tao mot doi so {
//Thuc hien chuyen doi gia tri int toi gia tri TypeA }
};
void main() {
int b=50; //Khai bao mot bien int co gia tri 50 TypeA ta1(b);//Khoi tao doi tuong ta1 bang gia tri int //TypeA ta1=b; //Tuong duong voi ta1(b) }
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 14
II.3 Hàm t
ạ
o m
ộ
t
đố
i s
ố
(ti
ế
p)
l
D
ấ
u = cách th
ứ
hai không ph
ả
i
tốn t
ử
gán, ch
ỉ
có tác d
ụ
ng g
ọ
i hàm
t
ạ
o m
ộ
t
đố
i s
ố
.
l
Bài t
ậ
p v
ề
nhà: Hãy xây d
ự
ng m
ộ
t l
ớ
p v
ề
xâu ký t
ự
đ
ó có s
ử
d
ụ
ng hàm t
ạ
o
m
ộ
t
đố
i s
ố
để
chuy
ể
n
đổ
i m
ộ
t xâu ký t
ự
thông th
ườ
ng thành
đố
i t
ượ
ng xâu ký t
ự
.
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 15
Ch
ươ
ng Hàm t
ạ
o hàm h
ủ
y
I Giới thiệu hàm tạo hàm hủyI.1 Giới thiệu hàm tạo hàm hủy
I.2 Hàm tạo hàm hủy người lập trình viết II Hàm tạo có đối số
II.1 Hàm tạo hai đối số II.2 Hàm tạo mặc định II.3 Hàm tạo đối số III Hàm tạo chép
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 16
III Hàm t
ạ
o chép
l
Hàm t
ạ
o chép (copy constructor) cho
phép ta t
ạ
o m
ộ
t
đố
i t
ượ
ng b
ả
n
c
ủ
a m
ộ
t
đố
i t
ượ
ng
đ
ã có.
(28)Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 17
III Hàm t
ạ
o chép (ti
ế
p)
l Khi khai báo biến kiểu ta khởi tạo giá trị choVí dụ:
int a=45; //tao bien a va khoi tao bang 45 int b=a; //tao bien b la ban cua a //int b(a); //tuong duong voi lenh int b=a;
Dấu = khai báo khơng phải lệnh gán, có nghĩa khởi tạo
l Với đối tượng ta tạo khởi tạo cho giống với biến kiểu Ví dụ: giả sử có lớp Alpha
Alpha a1; //tao mot doi tuong Alpha a1.getdata();//dua du lieu vao doi tuong a1
Alpha a2=a1;//tao doi tuong a2 la ban cua a1, o day ham //tao chep duoc goi de chep du lieu tu a1 sang a2
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 18
III Hàm t
ạ
o chép (ti
ế
p)
l Nếu không định nghĩa hàm tạo chép trình biên dịch tạo hàm tạo chép mặc định Hàm tạo chép mặc định chép y nguyên tất liệu từ đối tượng sang đối tượng khác Bởi vậy, ta cần chép liệu từ đối tượng sang đối tượng khác khơng cần định nghĩa hàm tạo chép Cịn ta muốn làm việc khác ta phải định nghĩa riêng hàm tạo chép
l Hàm tạo chép phải khai báo để truyền
đối số theo tham chiếu đối số nên để const
Bài giảng LTHDT-Phần 2, Chương 13 GV Ngô Công Thắng 19
III Hàm t
ạ
o chép (ti
ế
p)
l Hàm tạo chép gọi trường hợp sau: l Khi khởi tạo đối tượng
l Khi truyền đối tượng cho hàm theo giá trị
l Khi hàm trả vềđối tượng
l Ví dụ sử dụng hàm tạo, hàm hủy, biến ngồi biến tựđộng: Viết chương trình tạo lớp cho tạo đối tượng khởi tạo đối tượng xâu ký tự; hàm tạo đối tượng cần hiển thị liệu đối tượng,
(29)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
,
hàm b
ạ
n
I T
ạ
i ph
ả
i ch
ồ
ng tốn t
ử
?
II Ch
ồ
ng tốn t
ử
hai ngơi
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
IV Chuy
ể
n
đổ
i gi
ữ
a các
đố
i t
ượ
ng ki
ể
u
d
ữ
li
ệ
u c
ơ
b
ả
n
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
VI Ch
ồ
ng toán t
ử
gán = toán t
ử
[ ]
VII Ch
ồ
ng toán t
ử
nh
ậ
p/xu
ấ
t - Hàm b
ạ
n
(friend function)
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng
I T
ạ
i ph
ả
i ch
ồ
ng toán t
ử
?
l Chồng toán tử sử dụng tốn tử có sẵn để tác động tốn hạng khác nhau, tức ta định nghĩa tác động toán tử đối tượng lớp
l Chồng toán tử giúp chương trình dễ viết, dễ đọc dễ hiểu Ví dụ: giả sử ta muốn cộng hai đối tượng lớp airtime gán kết nhận
được vào đối tượng airtime khác Khi đó, ta viết
at3=at1+at2
sẽ dễ hiểu viết
at3=at1.add(at2) hay at3.add(at1,at2)
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Cơng Thắng
Ch
ươ
ng 14 Ch
ồ
ng tốn t
ử
I Tại phải chồng toán tử? II Chồng tốn tử hai ngơi III Chồng tốn tử
IV Chuyển đổi đối tượng kiểu liệu
V Chuyển đổi lớp
VI Chồng toán tử gán = toán tử [ ]
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng
Ch
ươ
ng 14 Ch
ồ
ng tốn t
ử
II Ch
ồ
ng tốn t
ử
hai ngơi
II.1 Ch
ồ
ng toán t
ử
s
ố
h
ọ
c
II.2 Ch
ồ
ng toán t
ử
quan h
ệ
(30)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng
II.1 Ch
ồ
ng tốn t
ử
s
ố
h
ọ
c
l
Ví d
ụ
1: Vi
ế
t ch
ươ
ng trình c
ộ
ng hai s
ố
ph
ứ
c nh
ậ
p vào t
ừ
bàn phím b
ằ
ng tốn t
ử
c
ộ
ng +.
l
Bài v
ề
nhà 1: Xây d
ự
ng l
ớ
p
đố
i t
ượ
ng xâu
ký t
ự
để
có th
ể
dùng phép c
ộ
ng ghép
nhi
ề
u xâu ký t
ự
thông th
ườ
ng thành m
ộ
t
xâu.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngơ Cơng Thắng
II.1 Ch
ồ
ng tốn t
ử
s
ố
h
ọ
c
l Các tốn tử chồng +, -, *, /
l Để chồng toán tử ta phải định nghĩa hàm xác
định phép tốn mà tốn tửđó thực Hàm chồng tốn tử giống hàm bình thường, khác tên hàm từ khóa operator kết hợp với tốn tử: operatorX, X tốn tử Ví dụđể chồng tốn tử + ta có tên hàm operator+
l Lời gọi hàm chồng toán tử dùng cú pháp giống hàm bình thường Ví dụ:
t3 = t1.operator+(t2);
Nhưng từ khóa operator, dấu chấm cặp dấu ngoặc () không cần thiết Bởi ta viết:
t3 = t1 + t2;
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngơ Cơng Thắng
Ch
ươ
ng 14 Ch
ồ
ng tốn t
ử
II Ch
ồ
ng tốn t
ử
hai ngơi
II.1 Ch
ồ
ng toán t
ử
s
ố
h
ọ
c
II.2 Ch
ồ
ng toán t
ử
quan h
ệ
II.3 Ch
ồ
ng toán t
ử
gán ph
ứ
c h
ợ
p
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Cơng Thắng
II.2 Ch
ồ
ng tốn t
ử
quan h
ệ
l
Ta có th
ể
ch
ồ
ng t
ấ
t c
ả
phép toán so
sánh (quan h
ệ
).
(31)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
II Ch
ồ
ng tốn t
ử
hai ngơi
II.1 Ch
ồ
ng tốn t
ử
s
ố
h
ọ
c
II.2 Ch
ồ
ng toán t
ử
quan h
ệ
II.3 Ch
ồ
ng toán t
ử
gán ph
ứ
c h
ợ
p
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 10
II.3 Ch
ồ
ng toán t
ử
gán
ph
ứ
c h
ợ
p
l Có thể chồng tốn tử phức hợp sau:
+=, -=, *=, /=
l Toán tử gán khác với tốn tử hai ngơi thơng thường chỗ chúng thay đổi đối tượng gọi chúng
l Mục đích tốn tử gán thay đổi đối tượng chúng thường dùng để trả giá trị
l Bài tập 3: Chồng toán tử gán += cho lớp airtime cho dùng để gán đối tượng airtime cho
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngơ Cơng Thắng 11
II.3 Ch
ồ
ng tốn t
ử
gán
ph
ứ
c h
ợ
p (ti
ế
p)
l
Khi tr
ả
v
ề
đố
i t
ượ
ng ta nên dùng l
ệ
nh tr
ả
v
ề
đặ
c bi
ệ
t sau:
Ví dụ: return airtime(hours,minutes);
Lệnh đặc biệt tạo đối tượng trả về, hàm tạo chép không thực
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 12
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
I T
ạ
i ph
ả
i ch
ồ
ng toán t
ử
?
II Ch
ồ
ng tốn t
ử
hai ngơi
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng ki
ể
u
d
ữ
li
ệ
u c
ơ
b
ả
n
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
(32)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 13
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
l
Tốn t
ử
m
ộ
t ngơi tốn t
ử
ch
ỉ
có m
ộ
t
tốn h
ạ
ng Ví d
ụ
: tốn t
ử
t
ă
ng ++, toán t
ử
gi
ả
m , toán t
ử
d
ấ
u âm – toán t
ử
ph
ủ
đị
nh logic ! Hay dùng nh
ấ
t toán t
ử
t
ă
ng
gi
ả
m Toán t
ử
t
ă
ng gi
ả
m có th
ể
dùng
ở
tr
ướ
c ho
ặ
c sau toán h
ạ
ng.
l
Bài t
ậ
p 4: Ch
ồ
ng toán t
ử
++ cho l
ớ
p
airtime
để
t
ă
ng
đố
i t
ượ
ng airtime lên
phút, tốn t
ử
++ có th
ể
đứ
ng tr
ướ
c sau
đố
i t
ượ
ng.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 14
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
l
Tốn t
ử
m
ộ
t ngơi tốn t
ử
ch
ỉ
có m
ộ
t
tốn h
ạ
ng Ví d
ụ
: tốn t
ử
t
ă
ng ++, tốn t
ử
gi
ả
m , toán t
ử
d
ấ
u âm – toán t
ử
ph
ủ
đị
nh logic ! Hay dùng nh
ấ
t toán t
ử
t
ă
ng
gi
ả
m Toán t
ử
t
ă
ng gi
ả
m có th
ể
dùng
ở
tr
ướ
c ho
ặ
c sau tốn h
ạ
ng.
l
Bài t
ậ
p 4: Ch
ồ
ng toán t
ử
++ cho l
ớ
p
airtime
để
t
ă
ng
đố
i t
ượ
ng airtime lên
phút, tốn t
ử
++ có th
ể
đứ
ng tr
ướ
c sau
đố
i t
ượ
ng.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 15
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
I T
ạ
i ph
ả
i ch
ồ
ng toán t
ử
?
II Ch
ồ
ng tốn t
ử
hai ngơi
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng ki
ể
u
d
ữ
li
ệ
u c
ơ
b
ả
n
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
VI Ch
ồ
ng toán t
ử
gán = toán t
ử
[ ]
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 16
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng
và ki
ể
u d
ữ
li
ệ
u c
ơ
b
ả
n
l Việc chuyển đổi kiểu thực tự động hàm chuyển đổi kiểu có sẵn
l Khi ta tạo lớp muốn chuyển đổi đối tượng lớp kiểu liệu phải viết hàm chuyển đối
l Việc chuyển đổi từ kiểu liệu sang đối tượng thực hàm tạo
đối số
(33)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 17
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng
và ki
ể
u d
ữ
li
ệ
u c
ơ
b
ả
n
l Hàm chồng toán tử ép kiểu khơng có kiểu trả về, tên hàm khố operator sau dấu cách đến tên kiểu Ví dụ: hàm chuyển đổi đối tượng lớp sang kiểu long có dạng sau:
operator long() {
//Thuc hien chuyen doi o day return longvar;
}
Mặc dù hàm có lệnh trả hàm lại khơng có kiểu trả về, kiểu trả vềẩn tên hàm
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 18
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng
và ki
ể
u d
ữ
li
ệ
u c
ơ
b
ả
n
l Cách gọi hàm chồng tốn tử ép kiểu:
Tên_kiểu(Đối tượng)
Ví dụ: long(doituong); ó (long) doituong;
l Hàm chồng tốn tử ép kiểu gọi tự động ta gán đối tượng cho biến kiểu khởi tạo biến kiểu
l Bài tập 5: Xây dựng lớp đối tượng chiều dài
đo đơn vị Anh: feet inches foot = 12 inches, meter = 3.280833 feet Một chiều dài feet inches viết 6’-2” Đặt tên lớp English
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 19
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng
và ki
ể
u d
ữ
li
ệ
u c
ơ
b
ả
n
l
Bài t
ậ
p v
ề
nhà: Chuy
ể
n
đố
i
đố
i t
ượ
ng xâu
ký t
ự
sang xâu ký t
ự
thông th
ườ
ng.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngơ Cơng Thắng 20
Ch
ươ
ng 14 Ch
ồ
ng tốn t
ử
I T
ạ
i ph
ả
i ch
ồ
ng toán t
ử
?
II Ch
ồ
ng tốn t
ử
hai ngơi
III Ch
ồ
ng tốn t
ử
m
ộ
t ngôi
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng ki
ể
u
d
ữ
li
ệ
u c
ơ
b
ả
n
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
(34)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 21
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
l
Trong nhi
ề
u tr
ườ
ng h
ợ
p, vi
ệ
c chuy
ể
n
đố
i
gi
ữ
a l
ớ
p khơng có ý ngh
ĩ
a.
l
Có cách
để
chuy
ể
n
đổ
i t
ừ
m
ộ
t l
ớ
p
sang m
ộ
t l
ớ
p khác:
lDùng hàm tạo đối số
lDùng hàm chồng tốn tử ép kiểu
l
Ví d
ụ
: Vi
ế
t l
ớ
p alpha beta
hàm c
ầ
n thi
ế
t
để
chuy
ể
n t
ừ
alpha sang
beta t
ừ
beta sang alpha.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 22
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
I T
ạ
i ph
ả
i ch
ồ
ng toán t
ử
?
II Ch
ồ
ng tốn t
ử
hai ngơi
III Ch
ồ
ng tốn t
ử
m
ộ
t ngơi
IV Chuy
ể
n
đổ
i gi
ữ
a
đố
i t
ượ
ng ki
ể
u
d
ữ
li
ệ
u c
ơ
b
ả
n
V Chuy
ể
n
đổ
i gi
ữ
a l
ớ
p
VI Ch
ồ
ng toán t
ử
gán = toán t
ử
[ ]
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 23
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
VI Ch
ồ
ng toán t
ử
gán = toán t
ử
[ ]
VI.1 Ch
ồ
ng toán t
ử
gán
đơ
n gi
ả
n =
VI.2 Ch
ồ
ng toán t
ử
ch
ỉ
s
ố
[]
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 24
VI.1 Ch
ồ
ng toán t
ử
gán
đơ
n gi
ả
n =
l Chúng ta sử dụng tốn tử gán để gán
đối tượng cho mà làm Tuy nhiên, đối tượng sử dụng trỏ hay làm việc đếm, đánh số thứ tự cho nó,… ta phải viết hàm chồng toán tử gán
l Hàm chồng toán tử gán hàm tạo chép
(35)Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 25
VI.1 Ch
ồ
ng tốn t
ử
gán
đơ
n gi
ả
n
l
Ví d
ụ
: T
ạ
o l
ớ
p omega g
ồ
m m
ụ
c d
ữ
li
ệ
u:
bi
ế
n xâu name ch
ứ
a xâu ký t
ự
ph
ả
n ánh
tên
đố
i t
ượ
ng, bi
ế
n nguyên snumber ch
ứ
a
s
ố
seri (th
ứ
t
ự
) c
ủ
a
đố
i t
ượ
ng Ch
ồ
ng toán
t
ử
gán cho gán hai
đố
i t
ượ
ng
n
ộ
i dung bi
ế
n xâu c
ủ
a
đố
i t
ượ
ng thay
đổ
i
còn s
ố
seri khơng thay
đổ
i.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 26
Ch
ươ
ng 14 Ch
ồ
ng toán t
ử
VI Ch
ồ
ng toán t
ử
gán = toán t
ử
[ ]
VI.1 Ch
ồ
ng toán t
ử
gán
đơ
n gi
ả
n =
VI.2 Ch
ồ
ng toán t
ử
ch
ỉ
s
ố
[]
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngơ Cơng Thắng 27
VI.2 Ch
ồ
ng tốn t
ử
ch
ỉ
s
ố
[]
l
Toán t
ử
ch
ỉ
s
ố
th
ườ
ng
đượ
c dùng
để
truy
nh
ậ
p ph
ầ
n t
ử
c
ủ
a m
ả
ng Ch
ồ
ng tốn
t
ử
ch
ỉ
s
ố
để
có th
ể
s
ử
d
ụ
ng ký hi
ệ
u [ ] truy
nh
ậ
p ph
ầ
n t
ử
c
ủ
a m
ộ
t
đố
i t
ượ
ng
m
ả
ng.
l
Bài t
ậ
p 6: T
ạ
o m
ộ
t l
ớ
p m
ả
ng có s
ử
d
ụ
ng
toán t
ử
[ ]
để
nh
ậ
p vào
đư
a ph
ầ
n
t
ử
c
ủ
a m
ả
ng.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 28
L
ư
u ý
l Khi hàm chồng toán tử cần trả đối tượng gọi hàm ta nên dùng:
l return *this
l Khai báo kiểu trả tham chiếu
l this trỏ có sẵn, chứa địa đối tượng gọi hàm thành viên, *this đối tượng gọi hàm
(36)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 29
VII Hàm b
ạ
n
1 Gi
ớ
i thi
ệ
u v
ề
hàm b
ạ
n
2 Nh
ữ
ng thu
ậ
n l
ợ
i dùng hàm b
ạ
n
3 Hàm b
ạ
n phá v
ỡ
ngun t
ắ
c bao gói
thơng tin
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 30
VII.1 Gi
ớ
i thi
ệ
u v
ề
hàm b
ạ
n
l Hàm bạn (friend function) hàm thông thường, thành viên lớp truy nhập tới thành viên
private protected lớp
l Để cho hàm thông thường hàm bạn lớp, mô tả lớp ta viết khai báo hàm với từ khóa friend đứng trước
Ví dụ: friend void show();
l Chú ý: Trong mô tả lớp chứa khai báo hàm bạn, không chứa định nghĩa hàm bạn.
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 31
VII.1 Gi
ớ
i thi
ệ
u v
ề
hàm b
ạ
n
l Khai báo hàm bạn phần mô tả lớp Tuy nhiên nên để phần public phần giao diện lớp, nghĩa người sử dụng lớp gọi hàm bạn
l Theo nguyên tắc bao bọc cất giấu liệu LTHĐT, hàm thành viên lớp truy nhập tới liệu private
và protected đối tượng Tuy nhiên, số trường hợp nguyên tắc bất tiện Các hàm bạn cách giải toả bất tiện
l Một hàm khai báo bạn nhiều lớp
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 32
VII.2 Nh
ữ
ng thu
ậ
n l
ợ
i dùng hàm b
ạ
n
l
Cho phép g
ọ
i hàm ch
ồ
ng toán t
ử
bên trái tốn t
ử
khơng ph
ả
i
đố
i t
ượ
ng
c
ũ
ng
đượ
c.
(37)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 33
VII.2 Nh
ữ
ng thu
ậ
n l
ợ
i dùng hàm b
ạ
n
l
Hàm b
ạ
n cho phép dùng ký hi
ệ
u hàm:
Đ
ôi
khi m
ộ
t hàm b
ạ
n cho m
ộ
t cú pháp g
ọ
i hàm
rõ ràng h
ơ
n hàm thành viên Ví d
ụ
, gi
ả
s
ử
chúng ta mu
ố
n m
ộ
t hàm tính bình ph
ươ
ng
m
ộ
t
đố
i t
ượ
ng obj,
đ
ó cách vi
ế
t
sqr(obj) rõ ràng h
ơ
n cách vi
ế
t obj.sqr()
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 34
VII.2 Nh
ữ
ng thu
ậ
n l
ợ
i dùng hàm b
ạ
n
l Hàm bạn cầu nối lớp: Giả sử ta có hàm tính tốn đối tượng hai lớp khác Có thể hàm có đối số đối tượng hai lớp tính tốn liệu private chúng Làm để dùng trực tiếp liệu private hai lớp chúng khơng có liên quan với nhau? Hàm bạn hai lớp làm điều
l Ví dụ:
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 35
VII.3 Hàm b
ạ
n phá v
ỡ
nguyên t
ắ
c
bao gói thơng tin
l Khi đưa vào hàm bạn, mặt thêm vào linh hoạt cho ngơn ngữ, mặt khác khơng cịn giữ ngun tắc có thành viên truy nhập liệu private lớp
l Một hàm thông thường muốn bạn lớp phải khai báo bên mơ tả lớp Thường người lập trình khơng truy nhập
được mã nguồn lớp nên chuyển hàm thành hàm bạn lớp
Ở khía cạnh tính tồn vẹn lớp cịn
được giữ
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 36
VII.3 Hàm b
ạ
n phá v
ỡ
nguyên t
ắ
c
bao gói thơng tin
l
M
ặ
c dù v
ậ
y, h
ạ
m b
ạ
n v
ẫ
n gây s
ự
l
ộ
n
x
ộ
n t
ư
t
ưở
ng LTH
Đ
T.
(38)Bài t
ậ
p ch
ươ
ng 14
Bài Vi
ế
t ch
ươ
ng trình nh
ậ
p vào s
ố
ph
ứ
c Tính t
ổ
ng, hi
ệ
u tích c
ủ
a s
ố
ph
ứ
c
đ
ã nh
ậ
p Yêu c
ầ
u s
ử
d
ụ
ng toán
t
ử
+, -, * cho s
ố
ph
ứ
c.
Bài Vi
ế
t ch
ươ
ng trình s
ử
d
ụ
ng
đố
i t
ượ
ng
ng
ă
n x
ế
p
để
đư
a hình s
ố
nh
ị
phân
c
ủ
a m
ộ
t s
ố
nguyên d
ươ
ng n.
Bài giảng LTHDT-Phần 2, Chương 14 GV Ngô Công Thắng 37
Bài t
ậ
p ch
ươ
ng 14
Bài Vi
ế
t ch
ươ
ng trình s
ử
d
ụ
ng
đố
i t
ượ
ng
ng
ă
n x
ế
p
để
tìm
đư
a hình t
ấ
t c
ả
các s
ố
nguyên t
ố
nh
ỏ
h
ơ
n m
ộ
t s
ố
nguyên
d
ươ
ng n nh
ậ
p vào t
ừ
bàn phím theo th
ứ
t
ự
gi
ả
m d
ầ
n.
Bài Vi
ế
t ch
ươ
ng trình nh
ậ
p vào danh
sách n tên S
ắ
p x
ế
p danh sách tên theo
v
ầ
n ABC S
ử
d
ụ
ng
đố
i t
ượ
ng xâu t
ự
t
ạ
o
để
ch
ứ
a tên.
(39)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
V H
ợ
p thành k
ế
th
ừ
a
VI K
ế
th
ừ
a b
ộ
i
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
I.6 Các hàm không kế thừa I.7 Sự kế thừa mối quan hệ loại
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
I.1 T
ầ
m quan tr
ọ
ng c
ủ
a k
ế
th
ừ
a
trong OOP
l Sự kế thừa khái niệm trung tâm thứ hai OOP
l Sự kế thừa cho phép sử dụng lại, có nghĩa
đưa lớp có vào sử dụng tình lập trình Nhờ việc sử dụng lại mà ta giảm thời gian cơng sức viết chương trình
l Sự kế thừa cịn đóng vai trị quan trọng việc thiết kế hướng đối tượng Nó giúp ta giải chương trình phức tạp
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
(40)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
I.2 S
ự
s
ử
d
ụ
ng l
ạ
i
l
Nh
ữ
ng ng
ườ
i l
ậ
p trình
đ
ã tìm nhi
ề
u cách
để
tránh vi
ế
t l
ạ
i mã
đ
ã có:
l Copy mã từ chương trình có sang chương trình sữa để chạy chương trình Công việc thường gây nhiều lỗi nhiều thời gian để sửa lỗi
l Tạo hàm để thư viện hàm để sử dụng không cần thay đổi Đây giải pháp tốt chuyển sang mơi trường lập trình hàm phải thay đổi dùng
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
I.2 S
ự
s
ử
d
ụ
ng l
ạ
i (ti
ế
p)
l Giải pháp tốt xuất OOP, sử dụng thư viện lớp Bởi lớp mơ
được thực thể giới thực để sử dụng môi trường cần thay đổi hàm Quan trọng OOP cho phép thay
đổi lớp mà khơng cần thay đổi mã nó: sử dụng kế thừa để rút lớp từ lớp có Lớp có (lớp sở) khơng bị thay đổi, cịn lớp (lớp rút từ lớp có, lớp dẫn xuất) sử dụng tất đặc điểm lớp có thêm vào đặc điểm riêng
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
I.2 S
ự
s
ử
d
ụ
ng l
ạ
i (ti
ế
p)
Đặc điểm A
Đặc điểm B
Đặc điểm C
Đặc điểm D Lớp sở
Đặc điểm A
Đặc điểm B
Đặc điểm C
Lớp dẫn xuất
Được định nghĩa lớp sở truy nhập từ lớp dẫn xuất
Được định nghĩa lớp dẫn xuất
Sự kế thừa
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
(41)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng
I.3 S
ự
k
ế
th
ừ
a thi
ế
t k
ế
h
ướ
ng
đố
i t
ượ
ng
l Sự kế thừa giúp cho việc thiết kế chương trình linh
động hơn, phản ánh mối quan hệ giới thực xác
l Trong lập trình hướng đối tượng có mối quan hệ thành phần chương trình:
l Mối quan hệ “có”: Một cơng nhân có tên, mã số, lương,… Một xe đạp có khung, bánh, tay lái,… Mối quan hệ “có” giới thực mơ chương trình hướng đối tượng lớp, lớp có thành viên lớp Lớp cơng nhân có chứa biến lưu trữ tên, biến lưu trữ mã số, biến lưu trữ lương; lớp xe đạp có đối tượng khung, hai đối tượng bánh, đối tượng tay lái Mối quan hệ có ngôn ngữ thủ tục (C, Pascal) mô cấu trúc (struct), ghi (record) Mối quan hệ “có” gọi hợp thành
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 10
I.3 S
ự
k
ế
th
ừ
a thi
ế
t k
ế
h
ướ
ng
đố
i t
ượ
ng (ti
ế
p)
l Mối quan hệ “loại”: Xe đạp đua, xe đạp địa hình, xe
đạp thiếu nhi loại xe đạp Tất loại xe đạp có đặc điểm chung: hai bánh, khung Một xe đạp đua, đặc điểm chung cịn có đặc điểm lốp nhỏ nhẹ Một xe đạp địa hình, ngồi đặc điểm chung xe đạp cịn có lốp to, dày phanh tốt Mối quan hệ “loại” mô chương trình hướng đối tượng kế thừa Ởđây, chung, khái qt mơ tả lớp sở, cụ thể, rõ ràng
được mô tả lớp dẫn xuất Sự kế thừa cơng cụ hữu ích thiết kế chương trình hướng đối tượng
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 11
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
I.6 Các hàm không kế thừa I.7 Sự kế thừa mối quan hệ loại
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 12
I.4 Cú pháp k
ế
th
ừ
a
class TenLopCoSo {
//Cac vien cua lop co so };
class TenLopDanXuat : public TenLopCoSo {
(42)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 13
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
I.6 Các hàm không kế thừa I.7 Sự kế thừa mối quan hệ loại
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 14
I.5 Truy nh
ậ
p thành viên l
ớ
p c
ơ
s
ở
t
ừ
l
ớ
p d
ẫ
n xu
ấ
t
l Những kế thừa? Tất liệu hàm thành viên lớp sở, tức đối tượng lớp dẫn xuất kế thừa tất liệu hàm thành viên lớp sở
l Truy nhập liệu lớp sở từ lớp dẫn xuất: Mặc dù đối tượng lớp dẫn xuất chứa thành viên liệu định nghĩa lớp sở lớp dẫn xuất ta truy nhập thành viên liệu private lớp sở (trừ thành viên public protected)
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 15
I.5 Truy nh
ậ
p thành viên l
ớ
p
c
ơ
s
ở
t
ừ
l
ớ
p d
ẫ
n xu
ấ
t
l
G
ọ
i hàm thành viên l
ớ
p c
ơ
s
ở
t
ừ
l
ớ
p d
ẫ
n
xu
ấ
t:
lNếu hàm thành viên lớp sở dẫn xuất có tên khác gọi hàm ta dùng tên hàm
lNếu hàm thành viên lớp sở dẫn xuất có tên giống gọi hàm ta gắn thêm tên lớp sở trước tên hàm toán tử ::
Tên_lớp_cơ_sở::Tên_thành_viên
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 16
I.5 Truy nh
ậ
p thành viên l
ớ
p c
ơ
s
ở
t
ừ
l
ớ
p d
ẫ
n xu
ấ
t
l
Trong OOP, hàm thành viên l
ớ
p c
ơ
s
ở
và l
ớ
p d
ẫ
n xu
ấ
t làm công vi
ệ
c t
ươ
ng
t
ự
đượ
c ch
ồ
ng hàm (trùng)
để
cho rõ ràng d
ễ
nh
ớ
.
(43)Ví d
ụ
l
Vi
ế
t ch
ươ
ng trình tính th
ể
tích di
ệ
n tích
b
ề
m
ặ
t c
ủ
a hình tr
ụ
có bán kính r chi
ề
u
cao h Bi
ế
t r
ằ
ng hình tr
ụ
m
ộ
t lo
ạ
i hình
trịn có bán kính r
đượ
c kéo dài v
ớ
i chi
ề
u
cao h.
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 17
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 18
Bài t
ậ
p v
ề
nhà
l
Vi
ế
t ch
ươ
ng trình qu
ả
n lý nhân s
ự
c
ủ
a
m
ộ
t tr
ườ
ng
đạ
i h
ọ
c Nhân s
ự
chia làm
lo
ạ
i: Giáo viên, Cán b
ộ
qu
ả
n lý nhân
viên ph
ụ
c v
ụ
Thông tin l
ư
u tr
ữ
v
ề
giáo
viên g
ồ
m có: tên, mã s
ố
, h
ọ
c hàm, h
ọ
c v
ị
Thông tin l
ư
u tr
ữ
v
ề
Cán b
ộ
qu
ả
n lý g
ồ
m
có tên, mã s
ố
ch
ứ
c v
ụ
Thông tin l
ư
u
tr
ữ
v
ề
Nhân viên ph
ụ
c v
ụ
g
ồ
m có tên
mã s
ố
.
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 19
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
I.6 Các hàm “không kế thừa” I.7 Sự kế thừa mối quan hệ loại
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 20
I.7 Các hàm khơng
đượ
c k
ế
th
ừ
a
l Có vài hàm đặc biệt khơng tự động kế thừa Đó hàm làm công việc cho riêng lớp sở lớp dẫn xuất Có hàm vậy: hàm chồng toán tử gán =, hàm tạo
(constructor) hàm hủy (destructor)
l Hàm tạo lớp sở phải tạo liệu lớp sở, hàm tạo lớp dẫn xuất phải tạo liệu lớp dẫn xuất Bởi hàm tạo lớp sở lớp dẫn xuất tạo liệu khác nên chúng thay Do hàm tạo không
(44)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 21
I.7 Các hàm khơng
đượ
c k
ế
th
ừ
a
l Tốn tử gán = lớp dẫn xuất phải gán giá trị cho liệu lớp dẫn xuất, toán tử = lớp sở phải gán giá trị cho liệu lớp sở Đây công việc khác nhau, tốn tử khơng tự động kế thừa
l Hàm hủy lớp dẫn xuất hủy liệu lớp dẫn xuất Nó khơng huỷ đối tượng lớp sở; phải gọi hàm hủy lớp sở để làm việc Hơn nữa, hàm hủy làm công việc khác nên chúng không tự động kế thừa
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 22
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Giới thiệu kế thừa
I.1 Tầm quan trọng kế thừa OOP I.2 Sự sử dụng lại
I.3 Sự kế thừa thiết kế hướng đối tượng I.4 Cú pháp kế thừa
I.5 Truy nhập thành viên lớp sở từ lớp dẫn xuất
I.6 Các hàm không kế thừa I.7 Sự kế thừa mối quan hệ loại
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 23
I.8 S
ự
k
ế
th
ừ
a m
ố
i quan h
ệ
lo
ạ
i
l Sự kế thừa LTHĐT thể mối quan hệ “loại” giới thực Các đối tượng lớp dẫn xuất loại đối tượng lớp sở
l Trong C++, ta gán đối tượng lớp dẫn xuất cho đối tượng lớp sở
truyền đối tượng lớp dẫn xuất cho hàm có
đối số lớp sở Tuy nhiên ta khơng nên làm
điều đối tượng lớp dẫn xuất thường có kích thước lớn đối tượng lớp sở
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 24
I.8 S
ự
k
ế
th
ừ
a m
ố
i quan h
ệ
lo
ạ
i
class alpha //lớp sở {
public:
void memfunc() //hàm thành viên public {}
};
class beta:public alpha //lớp dẫn xuất { };
void main() {
void anyfunc(alpha); //khai báo, hàm có đối số alpha aa; //đối tượng kiểu alpha beta bb; //đối tượng kiểu beta
(45)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 25
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
V H
ợ
p thành k
ế
th
ừ
a
VI K
ế
th
ừ
a b
ộ
i
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 26
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
1 Hàm t
ạ
o, hàm h
ủ
y v
ớ
i
đố
i t
ượ
ng l
ớ
p d
ẫ
n
xu
ấ
t
2 Khi ph
ả
i vi
ế
t hàm t
ạ
o cho l
ớ
p d
ẫ
n
xu
ấ
t
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 27
II.1 Hàm t
ạ
o, hàm h
ủ
y v
ớ
i
đố
i
t
ượ
ng l
ớ
p d
ẫ
n xu
ấ
t
l Khi định nghĩamột đối tượng lớp dẫn xuất, không hàm tạo thực mà hàm tạo lớp sở thực Trên thực tế, hàm tạo lớp sởđược thực trước Bởi đối tượng lớp sở đối tượng - phần - đối tượng lớp dẫn xuất, cần tạo phận trước tạo toàn thể
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 28
II.1 Hàm t
ạ
o, hàm h
ủ
y v
ớ
i
đố
i
t
ượ
ng l
ớ
p d
ẫ
n xu
ấ
t
l Như vậy, tạo đối tượng lớp dẫn xuất, hàm tạo lớp sở gọi trước sau hàm tạo lớp dẫn xuất gọi
l Khi đối tượng bị hủy, hàm hủy gọi theo thứ tự ngược lại: đối tượng lớp dẫn xuất hủy trước sau đến đối tượng lớp sở
l Trong danh sách khởi tạo hàm tạo lớp dẫn xuất gọi hàm tạo lớp sở Ví dụ:
(46)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 29
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
1 Hàm t
ạ
o, hàm h
ủ
y v
ớ
i
đố
i t
ượ
ng l
ớ
p d
ẫ
n
xu
ấ
t
2 Khi ph
ả
i vi
ế
t hàm t
ạ
o cho l
ớ
p d
ẫ
n
xu
ấ
t
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 30
II.2 Khi ph
ả
i vi
ế
t hàm t
ạ
o cho
l
ớ
p d
ẫ
n xu
ấ
t
l
Chúng ta không th
ể
t
ạ
o
đố
i t
ượ
ng b
ằ
ng
m
ộ
t hàm t
ạ
o mà khơng có l
ớ
p c
ủ
a
đố
i t
ượ
ng
đ
ó B
ở
i v
ậ
y, c
ả
chúng
ta có m
ộ
t hàm t
ạ
o
n
đố
i s
ố
l
ớ
p c
ơ
s
ở
thì v
ẫ
n ph
ả
i
đị
nh ngh
ĩ
a m
ộ
t hàm
t
ạ
o >=
n
đố
i s
ố
l
ớ
p d
ẫ
n xu
ấ
t.
l
B
ấ
t k
ỳ
c
ầ
n hàm t
ạ
o có
đố
i s
ố
để
t
ạ
o
đố
i t
ượ
ng l
ớ
p d
ẫ
n xu
ấ
t ta
ph
ả
i vi
ế
t hàm t
ạ
o l
ớ
p d
ẫ
n xu
ấ
t.
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 31
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
V H
ợ
p thành k
ế
th
ừ
a
VI K
ế
th
ừ
a b
ộ
i
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 32
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
(47)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 33
III.1 Các
đị
nh danh truy nh
ậ
p
l Khi chưa có kế thừa, hàm thành viên lớp truy nhập tới tất có lớp dù public hay private, bên ngồi lớp
đó truy nhập tới thành viên public
l Khi kế thừa xuất hiện, khả truy nhập mở rộng cho lớp dẫn xuất Các hàm thành viên lớp dẫn xuất truy nhập thành viên public protected lớp sở truy nhập thành viên private Bên lớp dẫn xuất truy nhập thành viên public lớp dẫn xuất
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 34
III.1 Các
đị
nh danh truy nh
ậ
p
Sự kế thừa khả truy nhập
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 35
III.2 Che gi
ấ
u d
ữ
li
ệ
u l
ớ
p c
ơ
s
ở
l Dữ liệu lớp sở nên đểở private hay protected?
Để liệu protected có thuận lợi khơng cần viết thêm hàm lớp sởđể truy nhập liệu từ lớp dẫn xuất Tuy nhiên, cách tốt
l Nói chung, liệu lớp nên để private (trừ số trường hợp đặc biệt) Dữ liệu public bị thay đổi hàm bất kỳđâu chương trình, điều nên tránh Dữ liệu protected bị thay đổi hàm lớp dẫn xuất
l Bất kỳ người rút lớp từ lớp khác có quyền truy nhập tới liệu protectedcủa lớp Sẽ an tồn tin cậy lớp dẫn xuất truy nhập trực tiếp liệu lớp sở
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 36
III.2 Che gi
ấ
u d
ữ
li
ệ
u l
ớ
p c
ơ
s
ở
l Một giao diện lớp bao gồm hàm dùng để truy nhập Thiết kế lớp cho hai giao diện: giao diện publicđể bên lớp sử dụng giao diện protectedđểđể lớp dẫn xuất sử dụng Không nên để giao diện truy nhập trực tiếp liệu Một thuận lợi việc để liệu lớp sởởprivate thay đổi mà khơng làm ảnh hưởng tới lớp dẫn xuất
l Để có truy nhập liệu lớp sở, viết thêm hàm thành viên cho lớp sở Các hàm nên để
ởprotected, chúng phần giao diện protected
(48)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 37
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
V H
ợ
p thành k
ế
th
ừ
a
VI K
ế
th
ừ
a b
ộ
i
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 38
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
l Sự kế thừa nhiều mức có nghĩa khơng lớp
beta rút từ lớp alpha, lớp gama rút từ beta, lớp delta rút từ
gama v.v
class alpha { };
class beta:public alpha { };
class gama:public beta { };
class delta:public gama { };
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 39
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
l
M
ộ
t l
ớ
p có th
ể
truy nh
ậ
p t
ớ
i t
ấ
t c
ả
l
ớ
p
t
ổ
tiên c
ủ
a nó, c
ụ
th
ể
hàm thành
viên
delta
có th
ể
truy nh
ậ
p t
ớ
i d
ữ
li
ệ
u
public
ho
ặ
c
protected
trong
gama
,
beta
,
và
alpha
T
ấ
t nhiên chúng không th
ể
truy nh
ậ
p t
ớ
i thành viên
private
c
ủ
a
b
ấ
t k
ỳ
l
ớ
p tr
ừ
c
ủ
a nó.
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 40
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
(49)Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 41
V H
ợ
p thành k
ế
th
ừ
a
l Sự hợp thành đặt đối tượng bên đối tượng khác hay, đứng phía lập trình, định nghĩa đối tượng lớp bên mô tả lớp khác
class alpha { }; class beta
{
private: alpha obj; };
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 42
V H
ợ
p thành k
ế
th
ừ
a
l
Khi s
ử
d
ụ
ng s
ự
k
ế
th
ừ
a t
ố
t h
ơ
n s
ự
h
ợ
p thành?
lKhi cần mối quan hệ “loại” lớp
lKhi cần mảng đối tượng lớp sở để chứa đối tượng lớp dẫn xuất
lKhi cần mảng trỏ lớp sở để chứa
địa đối tượng lớp dẫn xuất
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 43
Ch
ươ
ng 15 S
ự
k
ế
th
ừ
a
I Gi
ớ
i thi
ệ
u v
ề
k
ế
th
ừ
a
II Hàm t
ạ
o, hàm hu
ỷ
s
ự
k
ế
th
ừ
a
III
Đ
i
ề
u khi
ể
n vi
ệ
c truy nh
ậ
p l
ớ
p c
ơ
s
ở
IV K
ế
th
ừ
a nhi
ề
u m
ứ
c
V H
ợ
p thành k
ế
th
ừ
a
VI K
ế
th
ừ
a b
ộ
i
Bài giảng LTHDT-Phần 2, Chương 15 GV Ngô Công Thắng 44
VI K
ế
th
ừ
a b
ộ
i
l
K
ế
th
ừ
a b
ộ
i có ngh
ĩ
a m
ộ
t l
ớ
p d
ẫ
n xu
ấ
t
k
ế
th
ừ
a t
ừ
hai hay nhi
ề
u l
ớ
p c
ơ
s
ở
khác
nhau.
class Base1 { };
class Base2 { };
(50)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
Ch
ươ
ng 16
Đ
a hình
độ
ng, Hàm
ả
o
I Hàm
ả
o s
ự
đ
a hình
II
Ứ
ng d
ụ
ng c
ủ
a s
ự
đ
a hình
III L
ớ
p tr
ừ
u t
ượ
ng, hàm t
ạ
o hàm h
ủ
y
ả
o
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I Hàm
ả
o s
ự
đ
a hình
1 Gi
ớ
i thi
ệ
u v
ề
hàm
ả
o s
ự
đ
a hình
2 G
ọ
i hàm thành viên qua tr
ỏ
l
ớ
p c
ơ
s
ở
3 S
ự
liên k
ế
t
độ
ng
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.1 Gi
ớ
i thi
ệ
u v
ề
hàm
ả
o s
ự
đ
a hình
l Dạng đa hình thứ hai LTHĐT liên quan tới kế thừa, hàm ảo trỏ Ở đa hình thái thể chỗ: Lời gọi tới hàm thành viên làm cho hàm thành viên khác thực tuỳ thuộc vào kiểu đối tượng gọi hàm Sự đa hình cịn gọi liên kết động
l Hàm ảo hàm thành viên lớp, giống hàm thành viên thông thường, khác
được khai báo với từ khóa virtual đặt trước virtual void nhap();
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.2 G
ọ
i hàm thành viên qua tr
ỏ
l
ớ
p c
ơ
s
ở
l Con trỏ lớp sở chứa địa đối tượng lớp dẫn xuất Bởi vìđối tượng lớp dẫn xuất loại đối tượng lớp sở nên trỏ trỏ tới đối tượng lớp dẫn xuất có kiểu phù hợp với trỏ trỏ tới đối tượng lớp sở
l Khi lớp sở lớp dẫn xuất có hàm thành viên trùng nhau, hàm gọi qua trỏ lớp sở hàm
(51)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.2 G
ọ
i hàm thành viên qua tr
ỏ
l
ớ
p c
ơ
s
ở
l Sở dĩ hàm thành viên lớp sở
được thực trình biên dịch bỏ qua nội dung trỏ chọn hàm thành viên phù hợp với kiểu trỏ lớp sở
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.2 G
ọ
i hàm thành viên qua tr
ỏ
l
ớ
p c
ơ
s
ở
l Để gọi hàm thành viên lớp dẫn xuất qua trỏ lớp sở ta cho hàm thành viên lớp sở hàm ảo
l Khi dùng hàm ảo, trình biên dịch lựa chọn hàm
để thực dựa nội dung trỏ, tên kiểu trỏ Đây đa hình thái, lời gọi hàm mà thực hàm khác nhau, tuỳ thuộc vào nội dung trỏ
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.3 S
ự
liên k
ế
t
độ
ng
l Nếu lớp sở có hàm ảo trùng tên với hàm thành viên lớp dẫn xuất gọi hàm thành viên lớp dẫn xuất qua trỏ lớp sở trình biên dịch khơng biết gọi hàm Bởi trình biên dịch phải xếp để lựa chọn hàm thực thời điểm chạy chương trình
l Việc lựa chọn hàm thời điểm chạy chương trình gọi liên kết động (dynamic binding) Còn việc lựa chọn hàm thực theo cách thông thường, thời điểm biên dịch, gọi liên kết tĩnh (static binding)
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
I.3 S
ự
liên k
ế
t
độ
ng
l
S
ự
liên k
ế
t
độ
ng c
ầ
n nhi
ề
u th
ờ
i gian b
ộ
nh
ớ
h
ơ
n s
ự
liên k
ế
t t
ĩ
nh: L
ờ
i g
ọ
i hàm lâu
h
ơ
n,
đố
i t
ượ
ng l
ớ
p d
ẫ
n xu
ấ
t l
ớ
n h
ơ
n.
(52)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng
II
Ứ
ng d
ụ
ng c
ủ
a s
ự
đ
a hình
1 M
ả
ng tr
ỏ
tr
ỏ
t
ớ
i
đố
i t
ượ
ng c
ủ
a
các l
ớ
p khác nhau
2 Phân l
ậ
p ph
ầ
n ch
ươ
ng trình
Ví d
ụ
: Tính di
ệ
n tích hình: Hình tam giác
bi
ế
t c
ạ
nh a,b,c; hình ch
ữ
nh
ậ
t bi
ế
t
c
ạ
nh a,b; hình trịn bi
ế
t bán kính r Nh
ậ
p
vào m
ộ
t s
ố
hình
Đư
a di
ệ
n tích hình
đ
ã nh
ậ
p Yêu c
ầ
u cài
đặ
t
đ
a hình
độ
ng.
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 10
II.1 M
ả
ng tr
ỏ
tr
ỏ
t
ớ
i
đố
i
t
ượ
ng c
ủ
a l
ớ
p khác nhau
l Một ứng dụng đa hình sử dụng mảng trỏ lớp sở để chứa địa đối tượng lớp dẫn xuất khác
l Ví dụ: Viết chương trình quản lý giảng viên sinh viên Thông tin giảng viên có tên số báo đăng, thơng tin sinh viên có tên
điểm TBC Nhập vào số giảng viên sinh viên Đưa hình thơng tin giảng viên sinh viên nhập, có kèm theo đánh giá: giáo viên giỏi có số báo >=20, sinh viên giỏi có điểm TBC>=9.0
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 11
II.2 Phân l
ậ
p ph
ầ
n ch
ươ
ng trình
l
S
ự đ
a hình thái c
ũ
ng có th
ể
đượ
c s
ử
d
ụ
ng
để
giúp cho vi
ệ
c phân l
ậ
p, hay g
ỡ
b
ỏ
s
ự
ph
ụ
thu
ộ
c c
ủ
a m
ộ
t ph
ầ
n ch
ươ
ng trình vào
ph
ầ
n ch
ươ
ng trình khác.
l
Các ch
ươ
ng trình OOP
đượ
c chia thành
hai ph
ầ
n
đượ
c vi
ế
t b
ở
i nh
ữ
ng ng
ườ
i l
ậ
p
trình khác t
ạ
i th
ờ
i
đ
i
ể
m khác
nhau
Đ
ó ph
ầ
n t
ạ
o l
ớ
p ph
ầ
n s
ử
d
ụ
ng
các l
ớ
p.
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 12
II.2 Phân l
ậ
p ph
ầ
n ch
ươ
ng trình
l
Vi
ệ
c l
ậ
p trình s
ẽ đơ
n gi
ả
n h
ơ
n n
ế
u
ch
ươ
ng trình c
ủ
a ng
ườ
i s
ử
d
ụ
ng l
ớ
p ch
ỉ
ph
ả
i làm vi
ệ
c v
ớ
i m
ộ
t l
ớ
p thay vi nhi
ề
u l
ớ
p
khác
Đ
i
ề
u th
ự
c hi
ệ
n
đượ
c b
ằ
ng
s
ự
đ
a hình,
đ
ó dùng tham chi
ế
u
ho
ặ
c tr
ỏ
tr
ỏ
t
ớ
i
đố
i t
ượ
ng
để
truy
ề
n tr
ả
v
ề
t
ừ
m
ộ
t hàm.
(53)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Cơng Thắng 13
II.2 Phân l
ậ
p ph
ầ
n ch
ươ
ng trình
l
Ví d
ụ
2: S
ử
d
ụ
ng
đố
i s
ố
tr
ỏ
l
Ví d
ụ
3: Vi
ế
t l
ạ
i ch
ươ
ng trình qu
ả
n lý
gi
ả
ng viên sinh viên
đ
ó có s
ử
d
ụ
ng hàm
để
truy
ề
n tr
ả
v
ề
đố
i
t
ượ
ng khác nhau.
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 14
III L
ớ
p tr
ừ
u t
ượ
ng, hàm t
ạ
o
hàm h
ủ
y
ả
o
1 L
ớ
p tr
ừ
u t
ượ
ng (abstract class)
2 Hàm t
ạ
o
ả
o hàm h
ủ
y
ả
o
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 15
III.1 L
ớ
p tr
ừ
u t
ượ
ng
l Lớp trừu tượng lớp mà khơng có đối tượng tạo từ nó, đóng vai trị lớp sở cho lớp dẫn xuất Các lớp trừu tượng
được cài đặt C++ hàm ảo tinh khiết (pure virtual function)
l Hàm ảo tinh khiết hàm ảo mà khai báo hàm có thêm ký hiệu =0 vào sau khai báo hàm Thân hàm ảo có khơng có
Ví dụ: virtual void show()=0; virtual void show()=0
{ //Các lệnh hàm }
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 16
III.1 L
ớ
p tr
ừ
u t
ượ
ng
l
D
ấ
u b
ằ
ng
ở đ
ây không ph
ả
i tốn t
ử
gán, giá tr
ị
khơng
đượ
c gán cho
Cú pháp =0 ch
ỉ đơ
n gi
ả
n cách ch
ỉ
cho
trình biên d
ị
ch bi
ế
t r
ằ
ng m
ộ
t hàm tinh
khi
ế
t.
l
Để
trình liên k
ế
t ng
ă
n ch
ặ
n vi
ệ
c t
ạ
o m
ộ
t
đố
i t
ượ
ng t
ừ
l
ớ
p tr
ừ
u t
ượ
ng, ph
ả
i
(54)Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 17
III.2 Hàm t
ạ
o hàm h
ủ
y
ả
o
l
Câu h
ỏ
i
đặ
t “các hàm t
ạ
o có bao gi
ờ
là
ả
o khơng?” Khơng, khơng bao gi
ờ
Các
hàm
ả
o không th
ể
t
ồ
n t
ạ
i cho
đế
n hàm
t
ạ
o
đ
ã hoàn thành nhi
ệ
m v
ụ
c
ủ
a nó, b
ở
i
v
ậ
y hàm t
ạ
o khơng th
ể
ả
o.
l
Ngoài ra, t
ạ
o m
ộ
t
đố
i t
ượ
ng trình biên
d
ị
ch c
ầ
n bi
ế
t lo
ạ
i
đố
i t
ượ
ng t
ạ
o Do
đ
ó
khơng có hàm t
ạ
o
ả
o.
l
Trái l
ạ
i, hàm hu
ỷ
có th
ể
th
ườ
ng
nên
ả
o.
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 18
III.2 Hàm t
ạ
o hàm h
ủ
y
ả
o
l
Khi m
ộ
t l
ớ
p c
ơ
s
ở
có hàm
ả
o hàm h
ủ
y
c
ũ
ng nên
để
ả
o N
ế
u khơng
để
ả
o
hàm h
ủ
y l
ớ
p d
ẫ
n xu
ấ
t s
ẽ
không
đượ
c th
ự
c
hi
ệ
n h
ủ
y
đố
i t
ượ
ng l
ớ
p d
ẫ
n xu
ấ
t thông
qua tr
ỏ
l
ớ
p c
ơ
s
ở
.
l
Ví d
ụ
:
Bài giảng LTHDT-Phần 2, Chương 16 GV Ngô Công Thắng 19
III.2 Hàm t
ạ
o hàm h
ủ
y
ả
o
l
Khi m
ộ
t l
ớ
p c
ơ
s
ở
c
ầ
n hàm h
ủ
y
ả
o?
Khi th
ỏ
a mãn
đ
i
ề
u ki
ệ
n sau:
l Cần tạo lớp dẫn xuất từ lớp sở
l Các đối tượng lớp dẫn xuất hủy qua trỏ lớp sở
l Các hàm hủy lớp sở dẫn xuất thực công việc quan trọng chẳng hạn giải phóng nhớ
l