Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
839,34 KB
Nội dung
Ngơn ngữ lập trình Đa hình hàm ảo fit.hnue.edu.vn/~dungntp/NNLT 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Nội dung • • • • • • Đa hình Hàm ảo Liên kết muộn Hàm ảo Lớp trừu tượng Vấn đề cắt lát 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Xét yêu cầu tốn sau: • Có 100 người xếp hàng chờ kê khai thơng tin • Chỉ có đủ 100 tờ giấy cho họ kê khai • Khơng biết có người kê khai cán bộ, giáo viên người kê khai sinh viên • Làm để đảm bảo đủ giấy kê khai cho 100 người theo thông tin họ? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Giải pháp • => Chỉ đến lượt, người kê khai thông báo họ SV CB, GV in tờ khai tương ứng cho họ (sử dụng trỏ) • Giải pháp gọi tính đa hình lập trình hướng đối tượng • Có thể hiểu đa hình nhiều hình thức thể khác cho loại công việc 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Cách làm • Để thấy rõ tính đa hình đơi phải sử dụng Hàm ảo • Hàm ảo hàm khai báo với từ khóa virtual • Một hàm khai báo hàm ảo lớp sở hàm ảo lớp dẫn xuất cho dù lớp dẫn xuất có khai báo từ khóa virtual không 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Ví dụ với tốn 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Ví dụ với tốn 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Ví dụ với toán 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Ví dụ với tốn • N khai báo mảng ConNguoi • => hàm nhập gọi trường hợp 2? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN Nhìn lại khai báo lớp ConNguoi • Nếu khơng có từ khóa virtual đối tượng N hàm main() đối tượng thuộc lớp ConNguoi • => Khi gọi N[i]->nhap() hàm nhap() lớp ConNguoi gọi 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10 Nhìn lại khai báo lớp ConNguoi • Thực tế hàm nhap() lớp ConNguoi khai báo với từ khóa virtual • => Dù N đối tượng thuộc lớp ConNguoi N[i] tạo từ lớp hàm nhap() lớp gọi • Việc gọi là: liên kết muộn 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 11 Một số ý dùng hàm ảo • Một hàm khai báo ảo phải định nghĩa • Khi hàm ảo định nghĩa lớp dẫn xuất gọi ghi đè (overridden) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12 Chú ý phân biệt ghi đè (overridden) định nghĩa lại (redefined) • Giống nhau: thay đổi định nghĩa hàm lớp dẫn xuất • Khác nhau: – Ghi đè thay đổi định nghĩa hàm ảo – Định nghĩa lại thay đổi định nghĩa hàm ảo 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 13 Một số ý dùng hàm ảo • Chỉ cần đến liên kết muộn nên dùng hàm ảo (nếu khơng tốn nhớ làm chương trình chạy chậm) • Hàm hủy nên khai báo hàm ảo (nếu khơng, hàm hủy lớp dẫn xuất không gọi) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14 Qua ví dụ ta nắm Đa hình Hàm ảo Liên kết muộn • Hàm ảo? • Lớp trừu tượng? • Vấn đề cắt lát? 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 15 Xét ví dụ khác • Viết chương trình cho phép người dùng lựa chọn loại hình muốn vẽ • Nếu chọn hình vng phương thức vẽ hình vng gọi • Nếu chọn hình trịn phương thức vẽ hình trịn gọi • … 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 16 Cách giải quyết? • Vẫn phải vận dụng tính đa hình, hàm ảo, liên kết muộn • Trước tiên tạo lớp Hinh lớp sở có phương thức vẽ • Sau tạo lớp HVuong, HTron, HTamgiac, … lớp có phương thức vẽ riêng 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17 Cách giải quyết? • Tuy nhiên, phương thức vẽ lớp sở Hinh chưa thực biết vẽ • Khi phương thức khai báo hàm ảo • Cách viết: virtual void ve() = 0; 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 18 Lớp trừu tượng • Một lớp có nhiều hàm ảo gọi lớp trừu tượng • Khi lớp trừu tượng lớp dùng làm lớp sở (không thể tạo đối tượng từ lớp trừu tượng) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 19 Lớp trừu tượng • Lớp dẫn xuất từ lớp trừu tượng lớp trừu tượng trừ hàm ảo định nghĩa không tạo hàm ảo 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 20 Vấn đề cắt lát • Vấn đề cắt lát xảy thực chuyển kiểu lên (gán đối tượng lớp dẫn xuất cho đối tượng lớp sở, biến thành viên không nằm lớp sở bị biến => gọi cắt lát) 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 21 Tổng kết Đa hình Hàm ảo Liên kết muộn Hàm ảo Lớp trừu tượng Vấn đề cắt lát 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 22 Bài tập • Tạo lớp sở trừu tượng DongVat • Tạo lớp dẫn xuất Cho, Meo, Ga, Vit, Chim, … • Định nghĩa phương thức lại tiếng loại động vật • Viết chương trình cho phép người dùng lựa chọn vật u thích chương trình hiển thị tiếng kêu cách lại vật vừa chọn 02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 23