1. Trang chủ
  2. » Trung học cơ sở - phổ thông

index of cnpmpth03103slidepdf

54 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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út

class 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ượng

Dữ 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ủ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.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ủ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

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ủ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 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ủ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 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ủ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 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ị cho

Ví 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

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ế tha

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ĩa

mộ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

,

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

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

Tóm l

i, c

l

p c

ơ

s

hàm

o nên

để

hàm h

y c

a

o.

Bài t

p

Bài Vi

ế

t ch

ươ

ng trình tính di

n tích c

a

các hình: hình ch

nh

t có c

nh, hình

trịn có bán kính u c

u ch

ươ

ng

trình có cài

đặ

t

đ

a hình

độ

ng.

Ngày đăng: 05/04/2021, 22:24

w