ĐỀ CƯƠNG ÔN TẬP
MÔN LTHĐT
I/ Phần lý thuyết
Câu 1)
Cho biết kế thừa là gì? Khi nào nên dùng kế thừa, khi nào không nhất thiết dùng kế thừa, cho
ví dụ thể hiện 2 trường hợp trên.
Câu 2)
Cho biết lớp ảo là gì? Khi nào nên dùng lớp ảo, khi nào không nhất thiết dùng lớp ảo, cho ví
dụ thể hiện 2 trường hợp trên.
Câu 3)
Cho biết tính đóng gói trong hướng đối tượng là gì? Cho ví dụ.
Câu 4)
Phân biệt Class và object, cho ví dụ thực tế.
Câu 5)
Bộ khởi tạo (phương thức thiết lập) là gì, vai trò của bộ khởi tạo, cho ví dụ
Câu 6)
Bộ phá huỷ (phương thức huỷ bỏ) là gì, vai trò của bộ phá huỷ, cho ví dụ
Câu 7)
Tính đa hình là gì, cho một ví dụ cụ thể viết bằng mã.
Câu 8)
Phân biệt giữa overload và override, cho ví dụ mô tả.
Câu 9)
Hàm bạn được sử dụng trong trường hợp nào? Giữa hàm bạn và lớp bạn khác nhau ở điểm
nào? Cho ví dụ minh hoạ
CÂU 10)
Trong ngôn ngữ C++, liệt kê tất cả các trường hợp mà hàm thiết lập sao chép (copy
constructor) được tự động thực hiện?
Khi nào bắt buộc phải cài đặt tường minh hàm thiết lập sao chép?
CÂU 11)
Hãy nêu sự khác nhau giữa Overload và Override.
CÂU 12)
Cho biết hàm khởi tạo (constructor) là gì? tác dụng của nó? Thế nào là contructor
chuẩn? có mấy loại constructor chuẩn?
Các đối tượng của lớp thừa kế đơn được thiết lập và hủy bỏ theo thứ tự như thế nào ?
CÂU 13)
Hàm ảo là gì? thừa kế ảo là gì? Khi nào thì nên sử dụng hàm ảo? Thế nào là hàm ảo
thuần túy?
CÂU 14)
Thế nào là tính đóng gói? Lợi ích của tính đóng gói trong lập trình hướng đối tượng?
CÂU 15)
Thế nào là đa năng hóa toán tử? Trong lập trình hướng đối tượng sử dụng C++, những
toán tử nào không thể đa năng hóa? Viết cú pháp khai báo đa năng hóa toán tử.
II/ Phần bài tập
Câu 1)
Một cửa hàng cần quản lý hoạt động bán hàng theo các quy định sau:
+ Một mặt hàng có thể thuộc một trong các loại hàng sau
- Hàng thực phầm: Mã số, Tên, đơn vị tính, số lượng, đơn giá, ngày sản
xuất, ngày hết hạn
- Hàng gia dụng: Mã số, tên, đơn vị tính, số lượng, đơn giá, bảo hành
- Hàng quần áo giày dép: Mã số, tên, đơn vị tính, số lượng, đơn giá, kích
cỡ, màu sắc
+ Một hóa đơn chứa các thông tin: Mã hóa đơn, Ngày lập, tên khách hàng, địa chỉ,
thuế VAT và danh mục các mặt hàng được mua ( tối đa 10 mặt hàng)
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức tính trị giá cho hóa đơn
Câu 2)
Công ty XYZ quản lý việc mua hàng của 3 loại khách hàng:
- Loại A: Khách hàng bình thường (gồm x khách hàng):
Số tiền khách hàng trả = Số lượng hàng * đơn giá hàng + Thuế VAT (10%)
- Loại B: Khách hàng thân thiết (gồm y khách hàng):
Phần trăm khuyến mãi = MAX( Số năm thân thiết * 5%, 50%)
Số tiền khách hàng trả = (Số lượng hàng * đơn giá hàng ) * (100% - Phần trăm khuyến
mãi) +
Thuế VAT (10%)
- Loại C: Khách hàng đặc biệt (gồm z khách hàng):
Số tiền khách hàng trả = (Số lượng hàng * đơn giá hàng) *50% + Thuế VAT (10%)
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức tính doanh thu của công ty
Câu 3)
Hàng đợi là một danh sách hoạt động theo nguyên tắc “vào trước ra trước” (FIFO). Có thể cài
đặt hàng đợi như một danh sách liên kết đơn với thao tác thêm phần tử vào hàng đợi, lấy
phần tử từ hàng đợi lần lượt được xử lý như thêm phần tử vào cuối danh sách, lấy phần tử ở
đầu danh sách.
Ngăn xếp là một danh sách hoạt động theo nguyên tắc “vào sau ra trước” (LIFO). Có thể cài
đặt ngăn xếp như một danh sách liên kết đơn với thao tác thêm phần tử vào đầu danh sách,
lấy phần tử ở đầu danh sách.
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức sao chép giá trị từ một hàng đợi vào một ngăn xếp
Câu 4)
Một công ty kinh doanh địa ốc cần xây dựng chương trình quản lý thông tin về các khu đất và
căn hộ do công ty cung ứng với các thông tin cần quản lý như sau:
- Khu đất : Địa điểm, giá bán, diện tích.
- Căn hộ (có 2 loại) :
* Nhà sân vườn : Địa điểm, giá bán, diện tích xây dựng, diện tích sân vườn.
* Nhà phố : Địa điểm, giá bán, diện tích xây dựng, số tầng.
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức hiển thị thông tin theo từng phân loại
Ghi chú :
* Chỉ dùng một danh sách để quản lý các đối tượng.
* Số lượng đối tượng cần quản lý không quá 50.
Câu 5)
Cho N hình, gồm các loại hình: tam giác, chữ nhật, hình vuông, hình tròn
Các hình được mô tả với các thông số như sau:
- Hình tam giác: ký hiệu là ‘G’ kèm theo tọa độ 3 đỉnh.
- Hình chữ nhật: ký hiệu là ‘C’ kèm theo tọa độ góc trái trên và chiều dài (theo trục Ox)
và chiều rộng (theo trục Oy).
- Hình vuông: ký hiệu là ‘V’ kèm theo tọa độ góc trái trên và chiều dài cạnh.
- Hình tròn: ký hiệu là ‘T’ kèm theo tọa độ tâm và bán kính.
Mỗi tọa độ được xác định bởi hai số nguyên.
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức tìm hình chữ nhật nhỏ nhất bao quanh N hình đã cho xác
định bởi tọa độ góc trái trên và chiều dài, chiều rộng của hình chữ nhật đó.
Câu 6)
Khách sạn SOFITEL có 3 loại phòng với doanh thu phòng của tháng được tính như sau:
- Loại Deluxe: doanh thu phòng = (Số đêm * 750000 + Phí dịch vụ) * (100% + Phí phục
vụ)
- Loại Premium: doanh thu phòng = (Số đêm * 500000 + Phí dịch vụ) * 105%
- Loại Business: doanh thu phòng = Số đêm * 300000
Yêu cầu:
+ Thiết kế các lớp đối tượng cho bài toán trên, với mỗi đối tượng hãy chỉ ra:
- các thuộc tính
- các phương thức ( chỉ nêu tên phương thức và mục đích, không cài đặt)
+ Vẽ mô hình các lớp đối tượng và quan hệ giữa chúng (nếu có)
+ Dùng ngôn ngữ C++, cài đặt các lớp, lưu ý sinh viên chỉ cài đặt các thuộc tính và các
prototype cho các phương thức, không cài đặt phương thức
+ Hãy cài đặt phương thức để liệt kê phòng có doanh thu vượt trội. Biết phòng có
doanh thu vượt trội thỏa tính chất:
Doanh thu tháng >= Doanh thu tháng trước * 125%
Câu 7)
Xây dựng lớp TapHopSoPhuc đặc tả khái niệm tập hợp các số phức (số lượng phần tử không
giới hạn trước) với các phương thức:
• Thiết lập, thiết lập sao chép, hủy.
• Thêm phần tử vào tập hợp.
• Loại phần tử khỏi tập hợp.
• Kiểm tra phần tử thuộc tập hợp.
• Kiểm tra là tập con của một tập hợp.
Và các phép toán:
• Phép gán.
• Phép toán giao, hội , hiệu hai tập hợp (sử dụng các ký hiệu phép toán &, |, -).
• Phép toán xuất/nhập.
Ghi chú:
• Xem như đã có lớp SoPhuc đặc tả khái niệm số phức với đầy đủ các phương thức
cùng các phép toán: so sánh bằng (==), xuất/nhập,……
• Sinh viên không cần cài đặt lớp SoPhuc.
Câu 8)
Cho lớp Person dùng quản lý thông tin của một người. Dữ liệu thành viên của Person gồm có:
id(5 ký tự), name (tối đa 50 ký tự), yob(năm sinh), yod(năm mất). Lớp Person có một số
phương thức.
• Input(), Output(): Nhập, xuất các dữ liệu của Person
• Get Age(int year): trả về tuổi của người đó dựa vào năm hiện hành (year) nếu người đó
còn sống, hay là tuổi lúc người đó mất nếu yod khác 0
Yêu cầu: Khai báo lớp Person và cài đặt các phương thức trong lớp đó
Câu 9)
Một địa phương cần quản lý nhân khẩu nên đã thiết kế lớp PersonList dùng để quản lý n
(0<n<200) người khác nhau. Lớp PersonList có một số phương thức sau:
• Input(), Ouput(): nhập xuất các dữ liệu của PersonList
• Add(Person x): thêm một Person vào trong PersonList
• AgedPeople(int year, int age): trả về một PersonList những người có tuổi tính từ năm
"year" mà nhỏ tuổi hơn "age"
Yêu cầu: Khai báo lớp PersonList và cài đặt các phương thức trong lớp đó
CÂU 10)
Một công ty kinh doanh địa ốc cần xây dựng chương trình quản lý thông tin về các khu
đất và căn hộ do công ty cung ứng với các thông tin cần quản lý như sau:
- Khu đất : Địa điểm, đơn giá 1 km
2
, diện tích.
- Căn hộ (có 2 loại) :
* Nhà sân vườn : Địa điểm, đơn giá 1 km
2
, diện tích xây dựng, diện tích sân vườn.
* Nhà phố : Địa điểm, đơn giá 1 km
2
, diện tích xây dựng, số tầng.
a) Hãy thiết kế mô hình theo hướng hướng đối tượng để đáp ứng yêu cầu quản lý của
công ty này.