Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
626,5 KB
Nội dung
1Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Đa hình Đa hình 2 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Nội dung Nội dung Hàm ảo. Hàm ảo. Hàm thuần ảo. Hàm thuần ảo. Hàm hủy ảo. Hàm hủy ảo. Bài tập. Bài tập. 3 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Nội dung Nội dung Hàm ảo. Hàm ảo. Hàm thuần ảo. Hàm thuần ảo. Hàm hủy ảo. Hàm hủy ảo. Bài tập. Bài tập. 4 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Con trỏ đối tượng trong kế thừa: 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 bằng con trỏ => linh động. Truy xuất đối tượng kế thừa bằng con trỏ lớp cơ sở. 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 Kiểu con trỏ quyết định phương thức được gọi liên kết tĩnh. 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 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ở. Đố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; 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. B obj; A *p = &obj; p->func(); // B kế thừa A. void func(A obj) { } B obj; func(obj); // B kế thừa A. void func(A obj) { } B obj; func(obj); 5 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Animal +Talk() Cat +Talk() Dog +Talk() Ví dụ: Ví dụ: class Animal class Animal { { public: public: void talk() { cout << “Don’t talk!”; } void talk() { cout << “Don’t talk!”; } }; }; class Cat: public Animal class Cat: public Animal { { public: public: void talk() { cout << “Meo meo!”; } void talk() { cout << “Meo meo!”; } }; }; class Dog: public Animal class Dog: public Animal { { public: public: void talk() { cout << “Gau gau!”; } void talk() { cout << “Gau gau!”; } }; }; 6 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo void main() void main() { { Animal Animal a; a; Cat Cat c; c; Dog Dog d; d; Animal Animal *p; *p; p = &a; p = &a; p->talk(); p->talk(); p = &c; p = &c; p->talk(); p->talk(); p = &d; p = &d; p->talk(); p->talk(); } } Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Ví dụ: Ví dụ: void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } } void main() void main() { { Cat Cat c; c; Dog Dog d; d; giveATalk(&c); giveATalk(&c); giveATalk(&d); giveATalk(&d); } } 7 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Khái niệm hàm ảo: Khái niệm hàm ảo: Một phương thức của lớp. Một phương thức của lớp. Mang tính ảo. Mang tính ảo. Chuyển lời gọi hàm cho đúng đối tượng con trỏ Chuyển lời gọi hàm cho đúng đối tượng con trỏ đang trỏ đến. đang trỏ đến. Liên kết động. Liên kết động. Chỉ có ý nghĩa khi gọi thông qua con trỏ. Chỉ có ý nghĩa khi gọi thông qua con trỏ. Khai báo hàm ảo trong C++: Khai báo hàm ảo trong C++: virtual virtual <Chữ ký hàm>; <Chữ ký hàm>; 8 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Animal +virtual Talk() Cat +Talk() Dog +Talk() Ví dụ: Ví dụ: class Animal class Animal { { public: public: virtual virtual void talk() { cout << “Don’t talk!”; } void talk() { cout << “Don’t talk!”; } }; }; class Cat: public Animal class Cat: public Animal { { public: public: void talk() { cout << “Meo meo!”; } void talk() { cout << “Meo meo!”; } }; }; class Dog: public Animal class Dog: public Animal { { public: public: void talk() { cout << “Gau gau!”; } void talk() { cout << “Gau gau!”; } }; }; 9 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo void main() void main() { { Animal Animal a; a; Cat Cat c; c; Dog Dog d; d; Animal Animal *p; *p; p = &a; p = &a; p->Talk(); p->Talk(); p = &c; p = &c; p->Talk(); p->Talk(); p = &d; p = &d; p->Talk(); p->Talk(); } } Cat talks!! Cat talks!! Dog talks!! Dog talks!! Animal talks!! Animal talks!! Cat talks!! Cat talks!! Dog talks!! Dog talks!! Ví dụ: Ví dụ: void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } } void main() void main() { { Cat Cat c; c; Dog Dog d; d; giveATalk(&c); giveATalk(&c); giveATalk(&d); giveATalk(&d); } } 10 Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Sử dụng hàm ảo để làm gì? Sử dụng hàm ảo để làm gì? Gọn gàng, đơn giản, uyển chuyển, linh động. 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. Chương trình có tính dễ mở rộng, nâng cấp. void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } } void giveATalk(Animal obj, int iType) void giveATalk(Animal obj, int iType) { { if (iType == 0) if (iType == 0) { { Cat c = (Cat)obj; Cat c = (Cat)obj; c.talk(); c.talk(); } } else if (iType == 1) else if (iType == 1) { { Dog d = (Dog)obj; Dog d = (Dog)obj; d.talk(); d.talk(); } } } } [...]... pháp lập trình hướng đối tượng – GV Nguyễn 19 Bài tập Bài tập 12. 1: class A { public: [yyy] void f1() { cout . trình hướng đối tượng – GV. Nguyễn Minh Huy Hàm ảo Hàm ảo Con trỏ đối tượng trong kế thừa: 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. 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 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ở. Đối tượng. trình hướng đối tượng – GV. Nguyễn Minh Huy Nội dung Nội dung Hàm ảo. Hàm ảo. Hàm thuần ảo. Hàm thuần ảo. Hàm hủy ảo. Hàm hủy ảo. Bài tập. Bài tập. 12 Phương pháp lập trình hướng đối tượng