Bài giảng Ngôn ngữ lập trình - Bài 8: Đa hình và hàm ảo

10 7 0
Bài giảng Ngôn ngữ lập trình - Bài 8: Đa hình và hàm ảo

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

Thông tin tài liệu

[r]

(1)

Ngơn ngữ lập trình

Bài 8:

Đa Hình Hàm Ảo

Giảng viên: Lê Nguyễn Tuấn Thành Email:thanhlnt@tlu.edu.vn

(2)

Nội dung

2

1 Đa hình (Polymorphism)

2 Hàm ảo (Virtual function)

 Gắn kết muộn (Late binding)  Cài đặt hàm ảo

 Khi sử dụng hàm ảo?

 Hàm ảo (Pure Virtual Function)

Lớp trừu tượng (Abstract Class)

3 Hàm ảo Con trỏ

 Mở rộng tương thích kiểu  Ép kiểu lên (Upcasting)

 Ép kiểu xuống (Downcasting)

(3)

(Polymorphism)

 Xét ví dụ: với thơng điệp “nhảy”,

kangaroo cóc nhảy hai kiểu khác

 Chúng có hành vi “nhảy” nội dung hành vi

là khác

Đa hình (Polymorphism) tượng đối tượng thuộc

các lớp khác hiểu thông điệp theo

cách khác

(4)

Hàm ảo

4

 Hàm ảo cung cấp khả đa hình

 Hàm “sử dụng” trước thực

(5)

Hàm thành viên draw()

 Xây dựng lớp cho nhiều kiểu hình vẽ khác

 Ví dụ: Hình chữ nhật (Rectangle), hình trịn (Circle), hình oval

(Oval)…

 Mỗi hình cụ thể đối tượng lớp  Dữ liệu cho hình chữ nhật:chiều cao, chiều rộng  Dữ liệu cho hình trịn:tâm, bán kính

 Tất lớp kế thừa từ lớp cha: Figure

 Các lớp có hàm draw()

 Mục đích vẽ hình cụ thể hình

(6)

Lớp Figure lớp con

(7)

Sử dụng hàm thành viên draw()

 Mỗi lớp cần định nghĩa hàm draw() riêng

 Có thể gọi hàm draw() lớp, ví dụ:

Rectangle r; Circle c;

r.draw(); // Gọi hàm draw lớp Rectangle

c.draw(); // Gọi hàm draw lớp Circle

(8)

Ví dụ 1: Các lớp mơ tả hình vẽ (3/5)

Hàm thành viên center()

8

 Lớp cha Figure bao gồm hàm áp dụng cho

“tất cả” hình vẽ

 Xét hàm center() để di chuyển hình vẽ từ vị trí

tại tới vị trí trung tâm hình

 Cách làm: xóa hình vị trí tại, sau vẽ lại hình vị

trí trung tâm hình

 Hàm Figure::center() sử dụng (gọi) hàm draw() để vẽ lại hình  Câu hỏi:

 Hàm draw() sẽ gọi?  Từ lớp nào?

Figure:: Center()

(9)

Định nghĩa một lớp hình vẽ mới

 Xét lớp hình vẽ mới: lớp Triangle kế thừa từ lớp Figure  Lớp Triangle kế thừa hàm center() từ lớp cha Figure

 Chỉ định nghĩa lại hàm draw(), không định nghĩa lại hàm center()

trong lớp Triangle

 Liệu hàm center() có hoạt động với lớp Triangle?

 Liệu hàm center() có gọi hàm draw() riêng lớp Triangle?

 Nếu hàm gọi hàm draw() lớp Figure nghĩa khơng hoạt

động với lớp Triangle!

Chúng ta mun: lớp Triangle kế thừa hàm center() lớp

cha Figure TỰ ĐỘNG gọi hàm draw() lớp Triangle

chứ KHÔNG PHẢI hàm draw() lớp Figure

Vn đ: Hàm center() lớp Figure định nghĩa TRƯỚC

KHI lớp Triangle định nghĩa nên khơng biết tồn lớp

(10)

Thêm một lớp mới Triangle

của lớp Figure

Ngày đăng: 09/03/2021, 04:52

Tài liệu cùng người dùng

Tài liệu liên quan