intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Ngôn ngữ lập trình: Đa hình và hàm ảo - Nguyễn Thị Phương Dung

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:23

8
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Ngôn ngữ lập trình: Đa hình và hàm ảo, cung cấp cho người học những kiến thức như: Đa hình; Hàm ảo; Liên kết muộn; Hàm thuần ảo; Lớp trừu tượng; Vấn đề cắt lát. Mời các bạn cùng tham khảo!

Chủ đề:
Lưu

Nội dung Text: Bài giảng Ngôn ngữ lập trình: Đa hình và hàm ảo - Nguyễn Thị Phương Dung

  1. Ngôn ngữ lập trình Đa hình và hàm ảo fit.hnue.edu.vn/~dungntp/NNLT 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1
  2. Nội dung • Đa hình • Hàm ảo • Liên kết muộn • Hàm thuần ảo • Lớp trừu tượng • Vấn đề cắt lát 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 2
  3. Xét yêu cầu 1 bài toán như sau: • Có 100 người đang xếp hàng chờ kê khai thông tin • Chỉ có đủ 100 tờ giấy cho họ kê khai • Không biết có bao nhiêu người sẽ kê khai là cán bộ, giáo viên và bao nhiêu người sẽ kê khai là sinh viên • Làm thế nào để đảm bảo đủ giấy kê khai cho 100 người theo đúng thông tin của họ? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 3
  4. Giải pháp • => Chỉ khi đến lượt, người kê khai thông báo họ là SV hay là CB, GV thì mới in tờ khai tương ứng cho họ (sử dụng con trỏ) • Giải pháp này được gọi là tính đa hình trong lập trình hướng đối tượng • Có thể hiểu đa hình là nhiều hình thức thể hiện khác nhau cho một loại công việc 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 4
  5. Cách làm • Để thấy rõ tính đa hình đôi khi phải sử dụng Hàm ảo • Hàm ảo là hàm được khai báo với từ khóa virtual • Một hàm được khai báo là hàm ảo ở lớp cơ sở thì nó cũng là hàm ảo ở lớp dẫn xuất cho dù ở lớp dẫn xuất nó có được khai báo bằng từ khóa virtual hoặc không 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 5
  6. Ví dụ với bài toán ở trên 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 6
  7. Ví dụ với bài toán ở trên 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 7
  8. Ví dụ với bài toán ở trên 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 8
  9. Ví dụ với bài toán ở trên • N được khai báo là mảng các ConNguoi • => hàm nhập nào được gọi tại 2 trường hợp 1 và 2? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 9
  10. Nhìn lại khai báo lớp ConNguoi. • Nếu không có từ khóa virtual thì đối tượng N trong hàm main() là 1 đối tượng thuộc lớp ConNguoi • => Khi gọi N[i]->nhap() thì hàm nhap() của lớp ConNguoi sẽ được gọi. 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10
  11. Nhìn lại khai báo lớp ConNguoi. • Thực tế hàm nhap() của lớp ConNguoi được khai báo với từ khóa virtual • => Dù N là đối tượng thuộc lớp ConNguoi nhưng N[i] được tạo ra từ lớp nào thì hàm nhap() của lớp đấy được gọi • Việc này gọi là: liên kết muộn 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 11
  12. Một số chú ý khi dùng hàm ảo • Một hàm đã được khai báo là ảo thì phải được định nghĩa. • Khi một hàm ảo được định nghĩa trong lớp dẫn xuất thì được gọi là ghi đè (overridden) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12
  13. Chú ý phân biệt ghi đè (overridden) và định nghĩa lại (redefined) • Giống nhau: thay đổi định nghĩa 1 hàm trong lớp dẫn xuất • Khác nhau: – Ghi đè là thay đổi định nghĩa một hàm ảo – Định nghĩa lại là thay đổi định nghĩa một hàm không phải là ảo 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 13
  14. Một số chú ý khi dùng hàm ảo • Chỉ khi nào cần đến những liên kết muộn thì mới nên dùng hàm ảo (nếu không sẽ rất tốn bộ nhớ và làm chương trình chạy chậm) • Hàm hủy nên luôn được khai báo là hàm ảo (nếu không, hàm hủy ở lớp dẫn xuất có thể không được gọi) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14
  15. Qua ví dụ trên ta đã nắm được  Đa hình  Hàm ảo  Liên kết muộn • Hàm thuần ảo? • Lớp trừu tượng? • Vấn đề cắt lát? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 15
  16. Xét ví dụ khác • Viết 1 chương trình cho phép người dùng lựa chọn loại hình mình muốn vẽ. • Nếu chọn hình vuông thì phương thức vẽ của hình vuông được gọi • Nếu chọn hình tròn thì phương thức vẽ của hình tròn được gọi • …. 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 16
  17. Cách giải quyết? • Vẫn phải vận dụng tính đa hình, hàm ảo, và liên kết muộn. • Trước tiên tạo lớp Hinh là lớp cơ sở trong đó có phương thức vẽ • Sau đó tạo các lớp HVuong, HTron, HTamgiac, … mỗi lớp có một phương thức vẽ riêng 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17
  18. Cách giải quyết? • Tuy nhiên, phương thức vẽ của lớp cơ sở Hinh chưa thực sự biết vẽ như thế nào. • Khi đó phương thức này sẽ được khai báo là hàm thuần ảo • Cách viết: virtual void ve() = 0; 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 18
  19. Lớp trừu tượng • Một lớp có một hoặc nhiều hàm thuần ảo được gọi là lớp trừu tượng • Khi đã là lớp trừu tượng thì lớp đó chỉ có thể được dùng làm lớp cơ sở (không thể tạo ra các đối tượng từ một lớp trừu tượng) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 19
  20. Lớp trừu tượng • Lớp dẫn xuất từ một lớp trừu tượng cũng là lớp trừu tượng trừ khi các hàm thuần ảo được định nghĩa và không tạo ra một hàm thuần ảo mới nào nữa 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2