Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình
Truy xuất đối tượng bằng con trỏ => linh động.
Truy xuất đối tượng kế thừa bằng con trỏ lớp cơ sở.
Kiểu con trỏ quyết định phương thức được gọi
liên kết tĩnh.
Đối tượng kế thừa truyền vào hàm nhận tham số kiểu cơ sở.
Đối tượng kế thừa có thể đóng vai trò đối tượng cơ sở.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình
1Phương pháp lập trình hướng đối tượng. Đa hình 2Phương pháp lập trình hướng đối tượng. Nội dung Hàm ảo. Hàm thuần ảo. Hàm hủy ảo. Bài tập. 3Phương pháp lập trình hướng đối tượng. Nội dung Hàm ảo. Hàm thuần ảo. Hàm hủy ảo. Bài tập. 4Phương pháp lập trình hướng đối tượng. Hàm ảo Con trỏ đối tượng trong kế thừa: Truy xuất đối tượng bằng con trỏ => linh động. Truy xuất đối tượng kế thừa bằng con trỏ lớp cơ sở. Kiểu con trỏ quyết định phương thức được gọi liên kết tĩnh. Đối tượng kế thừa truyền vào hàm nhận tham số kiểu cơ sở. Đối tượng kế thừa có thể đóng vai trò đối tượng cơ sở. A obj; A *p; p = &obj; p = new A; // B kế thừa A. B obj; A *p = &obj; p->func(); // B kế thừa A. void func(A obj) { } B obj; func(obj); 5Phương pháp lập trình hướng đối tượng. Hàm ảo Animal +Talk() Cat +Talk() Dog +Talk() Ví dụ: class Animal { public: void talk() { cout << “Don’t talk!”; } }; class Cat: public Animal { public: void talk() { cout << “Meo meo!”; } }; class Dog: public Animal { public: void talk() { cout << “Gau gau!”; } }; 6Phương pháp lập trình hướng đối tượng. Hàm ảo void main() { Animal a; Cat c; Dog d; Animal *p; p = &a; p->talk(); p = &c; p->talk(); p = &d; p->talk(); } Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Ví dụ: void giveATalk(Animal *p) { p->talk(); } void main() { Cat c; Dog d; giveATalk(&c); giveATalk(&d); } 7Phương pháp lập trình hướng đối tượng. Hàm ảo Khái niệm hàm ảo: Một phương thức của lớp. Mang tính ảo. Chuyển lời gọi hàm cho đúng đối tượng con trỏ đang trỏ đến. Liên kết động. Chỉ có ý nghĩa khi gọi thông qua con trỏ. Khai báo hàm ảo trong C++: virtual ; 8Phương pháp lập trình hướng đối tượng. Hàm ảo Animal +virtual Talk() Cat +Talk() Dog +Talk() Ví dụ: class Animal { public: virtual void talk() { cout << “Don’t talk!”; } }; class Cat: public Animal { public: void talk() { cout << “Meo meo!”; } }; class Dog: public Animal { public: void talk() { cout << “Gau gau!”; } }; 9Phương pháp lập trình hướng đối tượng. Hàm ảo void main() { Animal a; Cat c; Dog d; Animal *p; p = &a; p->Talk(); p = &c; p->Talk(); p = &d; p->Talk(); } Cat talks!! Dog talks!! Animal talks!! Cat talks!! Dog talks!! Ví dụ: void giveATalk(Animal *p) { p->talk(); } void main() { Cat c; Dog d; giveATalk(&c); giveATalk(&d); } 10Phương pháp lập trình hướng đối tượng. Hàm ảo Sử dụng hàm ảo để làm gì? Gọn gàng, đơn giản, uyển chuyển, linh động. Chương trình có tính dễ mở rộng, nâng cấp. void giveATalk(Animal *p) { p->talk(); } void giveATalk(Animal obj, int iType) { if (iType == 0) { Cat c = (Cat)obj; c.talk(); } else if (iType == 1) { Dog d = (Dog)obj; d.talk(); } } 11Phương pháp lập trình hướng đối tượng. Nội dung Hàm ảo. Hàm thuần ảo. Hàm hủy ảo. Bài tập. 12Phương pháp lập trình hướng đối tượng. Hàm thuần ảo Có một số hàm ảo không thể cài đặt hoặc không có ý nghĩa khi cài đặt trong lớp cơ sở. class Animal { public: virtual void talk() { cout << “Don’t talk!”; } }; Biến thành hàm thuần ảo!! 13Phương pháp lập trình hướng đối tượng. Hàm thuần ảo Khái niệm hàm thuần ảo: Hàm ảo chỉ có khai báo mà không có cài đặt. Phần cài đặt do lớp kế thừa đảm nhận. Khai báo trong C++: virtual = 0; Lớp trừu tượng (abstract class): Lớp chứa hàm thuần ảo. Không thể tạo đối tượng từ lớp trừu tượng. Chỉ dùng để kế thừa. 14Phương pháp lập trình hướng đối tượng. Hàm thuần ảo void main() { Animal a; // Sai. Animal *p = new Animal; // Sai. Animal *q = new Cat; // Đúng. q->talk(); } Ví dụ: class Animal { public: virtual void talk() = 0; }; class Cat: public Animal { public: void talk() { cout << “Meo meo!”; } }; class Dog: public Animal { public: void talk() { cout << “Gau gau!”; } }; Cat talks!! 15Phương pháp lập trình hướng đối tượng. Nội dung Hàm ảo. Hàm thuần ảo. Hàm hủy ảo. Bài tập. 16Phương pháp lập trình hướng đối tượng. Hàm hủy ảo void main() { GiaoVien *p1 = new GiaoVien; delete p1; GVCN *p2 = new GVCN; delete p2; GiaoVien *p3 = new GVCN; delete p3; } Ví dụ: class GiaoVien { private: char *m_strHoTen; public: ~GiaoVien() { delete m_strHoTen; } }; class GVCN : public GiaoVien { private: char *m_strLopCN; public: ~GVCN() { delete m_strLopCN; } }; ~GiaoVien() ~GVCN() ~GiaoVien() ~GiaoVien() 17Phương pháp lập trình hướng đối tượng. Hàm hủy ảo Dr. Guru khuyên: Hàm hủy của lớp phải luôn là hàm ảo. Chuyển lời gọi đến hàm hủy của lớp kế thừa. class GiaoVien { private: char *m_strHoTen; public: virtual ~GiaoVien() { delete m_strHoTen; } }; GiaoVien *p3 = new GVCN; delete p3; ~GVCN() ~GiaoVien() 18Phương pháp lập trình hướng đối tượng. Tóm tắt Hàm ảo: Chuyển lời gọi hàm đến đúng đối tượng. Chỉ có ý nghĩa khi gọi từ con trỏ. Hàm thuần ảo: Hàm ảo chỉ có khai báo mà không có cài đặt. Lớp kế thừa đảm nhận việc cài đặt. Lớp có chứa hàm thuần ảo lớp trừu tượng Lớp trừu tượng chỉ dùng để kế thừa. Hàm hủy ảo: Hàm hủy phải luôn luôn là hàm ảo. 19Phương pháp lập trình hướng đối tượng. Nội dung Hàm ảo. Hàm thuần ảo. Hàm hủy ảo. Bài tập. 20Phương pháp lập trình hướng đối tượng. Bài tập Bài tập 12.1: class A { public: [yyy] void f1() { cout << “Good morning.\n”; f2(); } [zzz] void f2() { cout << “Good afternoon.\n”; } }; class B: public A { public: void f1() { cout << “Good evening.\n”; f2(); } void f2() { cout << “Good night.\n”; } }; void main() { A *pObj = new B; pObj->f1(); } Cho biết những gì xuất hiện trên màn hình trong các trường hợp: a) [yyy] trống, [zzz] trống. b) [yyy] trống, [zzz] virtual. c) [yyy] virtual, [zzz] trống. d) [yyy] virtu
File đính kèm:
- bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_bai_da_hinh.pdf