LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 8
lượt xem 29
download
Tài liệu tham khảo dành cho giáo viên, sinh viên chuyên ngành công nghệ thông tin - Giáo trình lập trình hướng đối tượng.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 8
- MỤC TIÊU LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Giới thiệu khái niệm thừa kế ảo, hàm ảo Tính đa hình trong lập trình hướng đối tượng Chương 8: THỪA KẾ ẢO-TÍNH ĐA HÌNH Giáo viên: Võ Hồng Bảo Châu Khoa CNTT trường ĐH Lạc Hồng OOP-CHƯƠNG 8-TÍNH ĐA HÌNH 2 NỘI DUNG CHI TIẾT Tính Tính Đa Hình(Polymorphism) • Đa hình: “nhiều hình thức”, hành động cùng tên có thể • TÍNH ĐA HÌNH được thực hiện khác nhau đối với các đối tượng/các lớp • OVERLOADED VÀ OVERRIDDEN khác nhau. • Ngữ cảnh khác kết quả khác • LIÊN KẾT TĨNH • LIÊN KẾT ĐỘNG Điểm Đường Thẳng Hình Tròn Hình Vuông • HÀM ẢO • THỪA KẾ ẢO Vẽ OOP-CHƯƠNG 8-TÍNH ĐA HÌNH OOP-CHƯƠNG 8-TÍNH ĐA HÌNH 3 4 1
- TÍNH ĐA HÌNH VÍ DỤ VỀ TÍNH ĐA HÌNH class CIRCLE • Khả năng có những hiện thực khác nhau cho cùng một class ĐànBà int x,y,r; hành vi void Draw () void DiChuyển(); { circle (x,y,r); } • Kỹ thuật cho phép thay đổi nội dung của cùng 1 hành vi trong 2 lớp cha – con class RECTANGLE class SHAPE int x1,y1, x2, y2; void Draw () class Người void Draw () • Bản chất: Sửa code của cùng 1 hành vi ở 2 lớp cha con để { void DiChuyển(); { rectangle(x1,y1, x2, y2); } code này khác nhau } class TRIANGLE • Đa hình tạo ra khả năng cho phép gọi một hành vi của một int x1,y1, x2, y2 , x3, y3; lớp mà không cần quan tâm đến hiện thực của hành vi này. class ĐànÔng void Draw () void DiChuyển(); { line(x1,y1, x2, y2); line(x2,y2, x3, y3); line(x3,y3, x1, y1); Đa hình tạo được tính mềm dẻo/linh động } của chương trình OOP-CHƯƠNG 8-TÍNH ĐA HÌNH OOP-CHƯƠNG 8-TÍNH ĐA HÌNH 5 6 OVERLOADED VÀ OVERRIDDEN LIÊN KẾT TĨNH • Liên kết tĩnh (static binding): • Overloaded methods: – Xác định khi biên dịch chương trình. – Nhằm cung cấp các dạng khác nhau của hành vi (danh sách tham – Dùng hàm thành viên. số khác nhau), nhưng vẫn có cùng tên gọi trong cùng một lớp. – Gọi hàm của lớp cơ sở (lớp cha). • Overridden methods: – Hiện thực lại hành vi đã có của tổ tiên class ContactDir { ContactDir class SortedDir : public ContactDir { SortedDir //... public: – Phải có cùng tên và trùng mọi yếu tố tạo nên hành vi này. public: SortedDir(const int max) : ContactDir(max) int Lookup (const char {} *name); int Lookup(const char *name); //... }; }; void m ain() { cout
- LIÊN KẾT ĐỘNG HÀM ẢO • Liên kết động (dynamic binding) – Xác định khi thực thi chương trình. Xem kết qủa của việc khái quát hóa sau: Gọi Gọi hàm – Dùng hàm ảo (virtual function). của lớp – Gọi hàm của lớp dẫn xuất (lớp con). Bạn có hình dung nào nào ? nổi một ANIMAL di class ANIMAL – Thể hiện tính đa hình của OOP. Không chuyển như thế Dùng hàm ảo void Travel(); nào không? class ContactDir { ContactDir void m ain() { //... ContactDir c1(10); public: SortedDir *p1; p1 = &c1; virtual int Lookup (const char *name); class Bird class Fish class Snake cout
- Class DongCoDiezel{ Class DongCo{ public: VÍ DỤ public: void NhienLieu(){ virtual void NhienLieu(){ }; cout
- THỪA KẾ ẢO class GIATHANH{ class HINHCN: public GIATHANH{ protected: float dongia; float dai,rong; class A public: public: giathanh (float c){ dongia=c);}; HINHCN(float d,float r, float c): virtual dientich(){ } GIATHANH(c){ float trigia() { return dientich()*dongia;} dai=d;rong=r;} class C class B } Nếu không khai float dientich(){ return dai*rong;} báo hàm }; dientich là hàm ảo thì kết class HINHTRON: public GIATHANH{ float bk; quả chươngmain(){ là gì? void trình class D public: HINHTRON a(5,1000); HINHTRON(float r, float c): HINHCN b(2,4,2000); GIATHANH(c){ cout
- TÓM TẮT • Hàm ảo được khai báo với từ khóa virtual trong lớp cơ sở • Hàm ảo không nhất thiết phải được định nghĩa lại trong lớp dẫn xuất. THANK YOU • Một lớp có hàm ảo thuần túy được gọi là lớp ảo (lớp trừu tượng). Không thể khai báo đối tượng thuộc lớp ảo nhưng có thể khai báo con trỏ có kiểu lớp trừu tượng. • Tính đa hình là khả năng các đối tượng của các lớp khác nhau có quan hệ thừa kế phản ứng khác nhau đối với cùng m ột lời gọi hàm thành phần. • Tính đa hình được cài đặt dựa trên hàm ảo. OOP-CHƯƠNG 8-TÍNH ĐA HÌNH OOP-CHƯƠNG 8-TÍNH ĐA HÌNH 21 22 6
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Đề cương thực hành: Lập trình hướng đối tượng và C++ (CT114)
6 p | 339 | 31
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Giới thiệu
10 p | 98 | 11
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 141 | 9
-
Bài giảng môn Lập trình hướng đối tượng - Chương 1: Tổng quan về cách tiếp cận hướng đối tượng
20 p | 147 | 9
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng 2: Giới thiệu - ĐH Kinh tế TP.HCM
10 p | 83 | 7
-
Bài giảng Phương pháp lập trình hướng đối tượng: Bài tập 4
4 p | 109 | 6
-
Bài giảng Lập trình hướng đối tượng trong C++ - Phạm Thị Quỳnh
12 p | 81 | 6
-
Bài giảng Phương pháp lập trình hướng đối tượng: Ôn tập giữa kỳ
10 p | 111 | 5
-
Bài giảng Lập trình hướng đối tượng 1: Chương 0 - ThS. Thái Kim Phụng
15 p | 65 | 5
-
Bài giảng Lập trình hướng đối tượng: Chương 6 - Hà Văn Sang
13 p | 60 | 5
-
Bài giảng Lập trình hướng đối tượng: Chương 5 - Hà Văn Sang
9 p | 57 | 5
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 141 | 4
-
Bài giảng Phương pháp lập trình hướng đối tượng: Bài tập 5
4 p | 85 | 4
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 105 | 4
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Lập trình hướng đối tượng
15 p | 93 | 3
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Châu Ngân Khánh
10 p | 51 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn