You are on page 1of 4

BÀI LAB TUẦN 4B

ĐA HÌNH
(5 bài, 10.5 điểm)

Các chủ đề:

- Cú pháp hàm ảo, ảo thuần tuý


- Quy trình ghi đè (override)
- Thể hiện tính đa hình qua biến con trỏ hay tham chiếu
- Khai báo và khởi tạo một mảng con trỏ
- Bài toán cơ bản:
o biến cha private được dẫn xuất từ các biến con,
o hàm công thức tính biến cha là hàm ảo (thuần tuý)

Bài 1, 2 được 1.5 điểm, bài 3,4,5 mỗi bài được 2.5 điểm
Hàm ảo và tính đa hình
1. Ship & CruiseShip & CargoShip
a) Giả định mọi biến thành viên lớp cha là private, lớp con tuỳ ý protected hay private
Viết lớp Ship (tàu thủy) có:
Tên con tàu
Năm xuất xưởng
Một hàm khởi tạo và các hàm set/get
Một hàm ảo tên là print để in ra tên con tàu
Viết class CruiseShip (tàu đu lịch) kế thừa từ class Ship có:
Số hành khách tối đa
Một hàm khởi tạo và các hàm set/get
Hàm print ghi đè (override) hàm print của lớp cha in ra tên con tàu và số hành khách
Viết lớp CargoShip (tàu hàng) kế thừa class Ship có:
Số tấn hàng chở được
Một hàm khởi tạo và các hàm set/get
Hàm print ghi đè (override) hàm print của lớp cha in ra tên con tàu và số hàng chở được
Sử dụng 3 lớp trên trong một chương trình minh họa đơn giản
b) Làm tương tự câu a) nhưng đổi các biến thành viên thành protected
Hàm thuần ảo và tính đa hình

2. BasicShape & Circle & Rectangle


Viết lớp thuần ảo tên là BasicShape mô tả một hình cơ bản trong hình học, gồm các thành viên:

• 1 thuộc tính private là area chưa diện tích của hình.


• Hàm setArea cập nhật cho biến area
• hàm getArea trả lại giá trị của area
• hàm calcArea là hàm thuần ảo chịu trách nhiệm tính diện tích, sẽ được cài đặt ghi đè
(override) ở các lớp con.
Viết lớp Circle (hình tròn) kế thừa từ BasicShape có:

• centerX: tọa độ tâm hình tròn trên trục X


• centerY: tọa độ tâm hình tròn trên trục Y
• radius: bán kính hình tròn
• hàm khởi tạo 3 tham số ứng với 3 thuộc tính trên
• getter cho 3 thuộc tính
• cài đặt hàm calcArea thực hiện tính diện tích và trả lại giá trị
Viết lớp Rectangle (hình chữ nhật) kế thừa từ BasicShape có:

• thuộc tính dài và rộng


• hàm khởi tạo 2 tham số ứng với 2 thuộc tính dài và rộng
• getter cho cả 2 thuộc tính
• cài đặt hàm calcArea thực hiện tính diện tích và trả lại giá trị
Viết một chương trình minh họa 3 lớp trên
Từ bài 3 đến 5, sinh viên tự chọn danh sách tham số, tự đặt chế độ private protected public hợp
lý để đảm bảo tính hướng đối tượng; chỉ trừ thành viên mà đề đã nêu rõ private hay protected
thì cần làm theo yêu cầu. Sinh viên cũng được phép thêm hàm tạo hay hàm huỷ (nếu cần thiết).
3. Hinh3D & HinhHop & HinhCau
Cho lớp trừu tượng Hinh3D, gồm các thành viên:

• Các thuộc tính private: thể tích, màu sắc


• Hàm ảo thuần tuý tinhThetich nhằm tính thể tích, sẽ được cài ở lớp con
• Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
• Hàm ảo print in ra thể tích, màu sắc
Lớp HinhHop kế thừa Hinh3D, có:

• Các thuộc tính private: 3 cạnh a, b, c


• override hàm tinhThetich để trả về thể tích hình hộp là a * b * c
• Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
• override hàm print in ra ba cạnh, thể tích, màu sắc.
Lớp HinhCau kế thừa Hinh3D, có:

• Các thuộc tính private: bán kính r


• override hàm tinhThetich để trả về thể tích hình cầu là 4/3* pi * r * r * r với pi = 3.14
• Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
• override hàm print in ra bán kính r, thể tích, màu sắc.
Viết hàm main tạo một mảng 10 Hinh3D, có cả HinhHop hay HinhCau, cuối cùng in ra thông
tin cả mảng.
4. NhanVien & NhanVienSanXuat & NhanVienVanPhong
Cho lớp trừu tượng NhanVien, gồm các thành viên:
Thuộc tính private: mã nhân viên, lương
Hàm ảo thuần tuý tinhLuong nhằm tính ra lương, sẽ được cài ở lớp con
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
Hàm ảo print in ra mã nhân viên, lương
Lớp NhanVienSanXuat kế thừa NhanVien, có:
Thuộc tính private: số sản phẩm, tiền công một sản phẩm
override tinhLuong trả về tiền lương = số sản phẩm * tiền công một sản phẩm
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
override hàm print in ra mã nhân viên, lương, số sản phẩm, tiền công một sản phẩm
Lớp NhanVienVanPhong kế thừa NhanVien, có:
Thuộc tính private: số ngày công, lương cơ bản
override tinhLuong trả về trả về tiền lương bằng số ngày công * lương cơ bản / 30.
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
override hàm print in ra mã nhân viên, lương, số ngày công, lương cơ bản
Viết hàm main tạo một mảng 10 phần tử NhanVien, có cả NhanVienSanXuat và
NhanVienVanPhong, sau cùng in ra thông tin cả mảng.
5. Pet & Cat & Fish
Cho lớp Pet, gồm các thành viên sau:
Các thuộc tính private: tên, môi trường sống (nước, trên cạn, trong rừng, …)
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
Hàm ảo print in ra tên, môi trường sống.
Lớp Cat kế thừa Pet, có các đặc điểm:
Thuộc tính private: độ dài lông (ngắn, dài, vừa)
Kiểm tra đảm bảo mèo không thể sống dưới nước
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
Override hàm print in ra tên, điều kiện sống, độ dài lông.
Lớp Fish kế thừa lớp Pet, có các đặc điểm:
Thuộc tính private: loại cá
Kiểm tra đảm bảo cá không thể sống trong rừng
Hàm setInfor thiết lập giá trị cho mọi thuộc tính cần thiết
Override hàm print in ra tên, điều kiện sống, loại cá.
Hàm main khởi tạo một mảng 10 phần tử Pet có cả Cat và Fish, duyệt từng phần tử hỏi người
dùng muốn tạo ra Cat hay Fish rồi khởi tạo tương ứng, sau cùng in ra thông tin cả mảng.

You might also like