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

Bài giảng Lập trình hướng đối tượng: Chương 4 - ThS. Bùi Trọng Hiếu

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PDF | Số trang:60

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

trong chương trước chúng ta đã nắm được được tương đối về hoạt động của thừa kế, tuy nhiên đó mới chỉ là bề mặt của những gì liên quan đến vấn đề thừa kế trong đối tượng. Trong chương này, chúng ta bắt đầu làm quen với cột trụ thứ ba của mô hình hướng đối tượng, đó là đa hình. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình hướng đối tượng: Chương 4 - ThS. Bùi Trọng Hiếu

  1. Chương 4 ĐA HÌNH Lập trình hướng đối tượng – Đa hình 1
  2. Nội dung chính  Các đặc điểm quan trọng của LTHĐT  Giới thiệu  Các ví dụ  Phương thức ảo  Đa hình  Destructor ảo  Lớp cơ sở trừu tượng Lập trình hướng đối tượng – Đa hình 2
  3. Tài liệu đọc Lập trình hướng đối tượng – Đa hình 3
  4. Lập trình hướng đối tượng – Đa hình 4
  5. Lập trình hướng đối tượng – Đa hình 5
  6. Ví dụ 1 class Base class Derv1 : public Base { { public: public: void show( ) void show( ) { { cout
  7. Ví dụ 1 (tt) class Derv2 : public Base void main( ) { { public: Derv1 d1; void show( ) Derv2 d2; { Base *bp; cout
  8. Ví dụ 2 class Teacher { string name; int numOfStudents; public: Teacher(const string & new_name,int nos) { name=new_name; numOfStudents=nos; } void print() const; }; Lập trình hướng đối tượng – Đa hình 8
  9. Ví dụ 2 (tt) void Teacher::print() const { cout
  10. Ví dụ 2 (tt) int main() { Teacher t1("Teacher 1",50); Principal p1("Principal 1",40,"School"); Teacher *ptr; char c; cout > c; if (c=='t') ptr=&t1; else ptr=&p1; ptr->print(); // which print? return 0; } Lập trình hướng đối tượng – Đa hình 10
  11. Ví dụ 3 Lập trình hướng đối tượng – Đa hình 11
  12. Ví dụ 3 (tt) Lập trình hướng đối tượng – Đa hình 12
  13. Ví dụ 3 (tt) Lập trình hướng đối tượng – Đa hình 13
  14. Ví dụ 3 (tt) Lập trình hướng đối tượng – Đa hình 14
  15. Ràng buộc/Liên kết  Ràng buộc/Liên kết  Sự xác định phương thức nào trong một phân cấp lớp được gọi với một đối tượng cụ thể  Ràng buộc tĩnh/sớm  Chương trình dịch có thể xác định được phương thức nào được gọi trong một phân cấp lớp với một đối tượng cụ thể  Ràng buộc động/trễ  Sự xác định phương thức nào trong một phân cấp lớp được sử dụng với một đối tượng cụ thể xảy ra trong thời điểm thực thi chương trình Lập trình hướng đối tượng – Đa hình 15
  16. Giải thích kết quả của các ví dụ  Ví dụ 1  pb là con trỏ trỏ đến đối tượng thuộc lớp cơ sở Base (Base *pb)  Ví dụ 2  ptr là con trỏ trỏ đến đối tượng thuộc lớp cơ sở Teacher (Teacher *ptr)  Ví dụ 3  ani là con trỏ trỏ đến đối tượng thuộc lớp cơ sở Animal (Animal *ani) Lập trình hướng đối tượng – Đa hình 16
  17. Giải thích kết quả của các ví dụ (tt)  Ví dụ 1  pb=&d1; pb=&d2;  pb vẫn là trỏ đến đối tượng thuộc lớp Base (không quan tâm đến nội dung)  Ví dụ 2  Tương tự ptr vẫn là trỏ đến đối tượng thuộc lớp Teacher  Ví dụ 3  Tương tự ani vẫn là trỏ đến đối tượng thuộc lớp Animal  Lý do  Ràng buộc tĩnh/sớm Lập trình hướng đối tượng – Đa hình 17
  18. Giải pháp: Ràng buộc động  Chương trình dịch không thể xác định được sự ràng buộc của đối tượng và phương thức  Ràng buộc này chỉ được xác định một cách động tại thời điểm thực thi chương trình  Để xác định một phương thức bị ràng buộc động, ở khai báo phương thức của lớp cơ sở phải dùng từ khóa virtual  Khi một phương thức được định nghĩa ảo, tất cả các phương thức phải nạp chồng từ điểm này xuống phân cấp lớp cho dù nó có được khai báo là tường minh hay không Lập trình hướng đối tượng – Đa hình 18
  19. Các kết quả mới  Ví dụ 1  virtual void show( );  Kết quả:  Derv 1  Derv 2  Ví dụ 2  virtual void print() const;  Kết quả:  …  Name of School: School  Ví dụ 3  virtual void Speak()  Kết quả:  My name is Tony, go go !  My name is fluffy, meoo ! Lập trình hướng đối tượng – Đa hình 19
  20. Phương thức ảo  Giả sử lớp cơ sở Base có phương thức ảo method và các lớp dẫn xuất của Base nạp chồng phương thức này. Khi ta gọi method thông qua một con trỏ hay tham chiếu p có kiểu Base thì phương thức method được gọi sẽ là phương thức của đối tượng mà p đang trỏ đến  Chú ý: Gọi phương thức method trên một đối tượng kiểu Base sẽ không có hiệu quả như đã nói ở trên Lập trình hướng đối tượng – Đa hình 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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