Bài giảng Ngôn ngữ lập trình: Bài 8 - Lê Nguyễn Tuấn Thành - Trường Đại Học Quốc Tế Hồng Bàng

10 14 0
Bài giảng Ngôn ngữ lập trình: Bài 8 - Lê Nguyễn Tuấn Thành - Trường Đại Học Quốc Tế Hồng Bàng

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

Thông tin tài liệu

[r]

(1)

NGƠN NG LP 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

1 Đa hình (Polymorphism)

2 Cơ bản về Hàm ảo (Virtual Function)

 Gắn kết trễ (Late binding)  Cài đặt hàm ảo

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

 Hàm ảo thuần (Pure Virtual Function)

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

3 Con trỏ Hàm ảo

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

 Ép kiểu xuống (Downcasting) 2

(3)

(POLYMORPHISM)

 Một ba trụ cột quan trọng OOP

Đa hình (Polymorphism) hiện tượng đối

tượng thuộc lớp khác hiểu một

thông điệp theo cách khác

 Ví dụ: thơng điệp “nhảy”, một

kangaroo một cóc sẽ nhảy hai kiểu khác

nhau

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

hành vi khác

(4)

CƠ BẢN VỀ HÀM ẢO

 Hàm ảo

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

 Hàm “sử dụng” trước thực định

(5)

HÀM THÀNH VIÊN DRAW()

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

nhau

 Hình chữ nhật, hình trịn, hình oval …

 Mỗi hình cụ thể đối tượng lớp

 Dữ liệu hình chữ nhật: chiều cao, chiều rộng  Dữ liệu hình trịn: tâm, bán kính

 Tất cả lớp đều kế thừa từ một lớp cha:

Figure

 Các lớp đều có hàm draw()

 Mục đích vẽ hình hình

 Mỗi lớp có cài đặt khác tương ứng với loại

(6)

VÍ DỤ VỚI CÁC LỚP MƠ TẢ HÌNH VẼ (2/5)

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() của mỗi lớp, ví dụ:

Rectangle r; Circle c;

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

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

(7)

HÀM THÀNH VIÊN CENTER()

 Lớp cha Figure bao gồm những hàm có thể áp

dụng cho “tất cả” hình vẽ

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

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

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

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() gọi?  Từ lớp nào?

(8)

VÍ DỤ VỚI CÁC LỚP MƠ TẢ HÌNH VẼ (4/5):

ĐỊNH NGHĨA 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

 Hàm center() lớp Triangle kế thừa từ lớp cha

Figure

 Liệu hàm có hoạt động với lớp Triangle?  Hàm sử dụng hàm draw() riêng lớp Triangle!

 Nếu hàm sử dụng hàm Figure::draw() -> không hoạt

động với lớp Triangle

 Muốn: kế thừa hàm center() để sử dụng hàm

Triangle::draw() KHÔNG PHẢI hàm

Figure::draw()

 Nhưng lớp Triangle CHƯA ĐƯỢC định nghĩa hàm

Figure::center() định nghĩa!

(9)

HÀM ẢO

 Hàm ảo câu trả lời cho vấn đề  Nói với trình biên dịch:

 Khơng biết hàm cài đặt

 Đợi sử dụng chương trình  Sau lấy phần cài đặt từ đối tượng cụ thể

 Được gọi gn kết tr (late binding) hoặc gn kết

đng (dynamic binding)

 Những hàm ảo cài đặt chế late binding

(10)

VÍ DỤ DOANH SỐ BÁN HÀNG (1/2)

 Xây dựng chương trình giúp lưu trữ hồ sơ cho một

cửa hàng phụ tùng ô tô

 Mục đích: lưu trữ doanh số bán hàng

 Khơng lường trước hết tất loại doanh số bán hàng  Đầu tiên doanh số bán lẻ thông thường

 Sau đó: doanh số bán hàng giảm giá, doanh số bán

hàng qua thư điện tử, …

Ngày đăng: 01/04/2021, 16:54

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

Tài liệu liên quan