Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
1,05 MB
Nội dung
NGƠN NGỮ LẬP TRÌNH HÀM ẢO VÀ ĐA HÌNH Trần Thị Ngân Bộ môn Công nghệ phần mềm, Khoa CNTT Trường đại học Thủy Lợi Email: ngantt@tlu.edu.vn Nội dung Cơ hàm ảo Con trỏ hàm ảo Cơ hàm ảo Kết gán muộn Thi hành hàm ảo Khi sử dụng hàm ảo Lớp trừu tượng hàm ảo túy Một vài khái niệm Khái niệm kết gán: gắn thông báo với hàm cụ thể Kết gán sớm: kết gán biên dịch chương trình (các hàm có sẵn hàm người dùng định nghĩa) Kết gán muộn: kết gán thực chương trình (các hàm ảo) Một vài khái niệm Đa hình (polymorphism) ◦ Liên kết nhiều ngữ nghĩa với hàm ◦ Hàm ảo cung cấp khả ◦ Là nguyên tắc lập trình hướng đối tượng Ảo: Tồn chất thực tế không tồn Hàm ảo: Có thể sử dụng trước định nghĩa Ví dụ: Hình vẽ Lớp số kiểu hình vẽ - Hình chữ nhật (rectangle), hình trịn (circle), hình ovan (oval), … - Mỗi hình vẽ đối tượng lớp khác - Dữ liệu hình chữ nhật: chiều dài, chiều rộng, - Dữ liệu hình trịn: tâm, bán kính Tất dẫn xuất từ lớp cha (lớp sở): Figure - Hàm cần thiết: draw() để vẽ hình - Các thị khác cho hình vẽ Ví dụ hình vẽ: center() - Mỗi lớp cần hàm draw() khác - Có thể gọi draw() lớp: Rectangle r; Circle c; r.draw(); c.draw(); - Lớp cha Figure bao gồm hàm áp dụng cho tất hình vẽ; chẳng hạn hàm center() để di chuyển hình vẽ vào tâm hình Hàm thực hiện: ◦ Xóa hình ban đầu, sau vẽ lại ◦ Do Figure::center() gọi hàm draw để vẽ lại ◦ Vấn đề: Khi viết hàm center(), gọi hàm draw() từ lớp nào? Ví dụ hình vẽ: Hình Xét kiểu hình vẽ sau: lớp Triangle dẫn xuất từ lớp Figure Hàm center() kế thừa từ Figure: - Có làm việc với Triangle khơng? - Hàm sử dụng draw() khác với hình khác - Hàm sử dụng Figure::draw() không làm việc với Triangle Cần hàm center() kế thừa sử dụng hàm Triangle::draw() hàm Figure::draw() Vấn đề: Lớp Triangle chí cịn chưa viết viết Figure::center() Ví dụ hình vẽ: Hình ảo Câu trả lời sử dụng hàm ảo Nói cho biên dịch: - Không biết hàm thi hành - Đợi sử dụng chương trình - Sau nhận thi thành từ đối tượng Được gọi kết gán muộn kết gán động: Hàm ảo thi hành kết gán muộn VÍ DỤ: Xây dựng hàm ảo tính diện tích hcn hình tam giác int dt=0; class Hinh { protected: int chieurong, chieucao; public: Hinh( int a=0, int b=0) { chieurong = a; chieucao = b; } virtual int dientich() { cout