More than Just Lines on a Map: Best Practices for U.S Bike Routes
Bai giai de pp lthđt 2011 – 2012 khoa 10 (1)
1. Bài Giải Đề PP LTHĐT 2011 – 2012 Khóa 10
(Bài giải chỉ mang tính chất tham khảo)
Câu 1:
a. Hàm main trong đề bài có 2 constructor (phương thức khởi tạo/thiết lập) ở dòng 02 và 05 và 2
destructor (phương thức hủy) được gọi ở dòng 10 và sau khi kết thúc khối lệnh if.
b.
i. Dòng /*1*/ lỗi do không thể truy suất được tới thuộc tính this->m_tgian do có
tầm vực truy cập là private.
ii. Dòng /*2*/ lỗi do phương thức float MayLoc::congSuat() có tầm vực truy
cập là protected.
iii. Dòng /*3*/ lỗi do con trỏ pm gán với biến tĩnh mà trước đó, nó đã được cấp phát một
vùng nhớ động và chưa được hủy, vì vậy tạo nên sự rò rỉ bộ nhớ (Memory Leak).
iv. Dòng /*4*/ lỗi do pm lưu địa chỉ của một biến tĩnh mà nó còn được hủy trước đó khi
thoát khỏi khối lệnh if cho nên khi hủy sẽ phát sinh lỗi.
c. Dòng /*1*/:
this->m_tgian = t; /*1*/
sẽ được sửa thành:
this-> setTgian(t); /*1*/
d. Nếu xóa đi dòng /*2*/, kết quả xuất ra màn hình là:
Luong nuoc = 819
e. Để sửa lỗi ở dòng /*4*/, ta sẽ dời nó trước dòng gán biến tĩnh ml cho con trỏ pm (dòng 06):
01: void main() {
02: MayLoc *pm = new MayLoc();
03: if (pm->congSuat() < 5) /*2*/
04: {
05: MayLyTam ml(81.9, 10);
06: delete pm; /*4*/
07: pm = &ml; /*3*/
08: cout << "Luong nuoc = "
09: << pm->tinhLuongNuoc();
10: }
3. void main() {
cout << "Don gia hoa chat: " << MayXucTac::DON_GIA_HOA_CHAT << endl;
MayXucTac m;
m.nhap(); // Nhập thông tin sử dụng của máy xúc tác này
cout << "Chi phi su dung may: " << m.tinhChiPhi() << endl;
cout << "Luong nuoc loc duoc: " << m.tinhLuongNuoc() << endl;
}