Đề thi lý thuyết cuối kỳ 1 môn Phương pháp lập trình hướng đối tượng - Năm học: 2014-2015 - Nguyễn Minh Huy

ĐỀ THI LÍ THUYẾT CUỐI KỲ  
Môn học: PHƯƠNG PHÁP LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
Thời gian: 100 phút  
Học kỳ: 1 – Năm học: 2014-2015  
Giảng viên: ThS. Nguyễn Minh Huy, ThS. Lê Xuân Định, ThS. Đặng Bình Phương  
ThS. Nguyễn Khắc Huy, ThS. Hồ Tuấn Thanh  
Họ tên SV:  
MSSV:  
(Không được phép sử dụng tài liệu)  
Câu 1: Cho đoạn mã nguồn sau: (Đã include đầy đủ các thư viện chuẩn cần thiết)  
1
2
3
4
5
6
7
8
9
class Bike {  
private:  
char* brand; // hiệu xe  
public:  
15 void display(Bike& a, EBike& b) {  
16  
17  
18  
19  
a.move(2);  
b.move(2);  
}
virtual void move(int t1) {  
cout << brand << ":" << t1*12 << " "; 20 int main() {  
}
21  
22  
23  
24  
EBike b1, b2;  
display(b1, b2);  
return 0;  
};  
10 class EBike : public Bike {  
}
11  
12  
public: void move(int t2) {  
Bike::move(t2*2);  
13  
}
14 };  
a. Hãy cài đặt bổ sung các phương thức cần thiết để giải quyết các vấn đề về thuộc tính  
con trỏ cho lớp đối tượng Bike.  
b. Cho biết kết quả xuất ra màn hình của chương trình trên (sau khi đã bổ sung code đầy  
đủ ở câu (a)). Giải thích ngắn gọn.  
c. Nêu sự khác biệt giữa lớp đối tượng (class) và đối tượng cụ thể (object, instance).  
Liệt kê các lớp đối tượng và các đối tượng cụ thể trong đoạn mã nguồn trên.  
Câu 2: Cho đoạn mã nguồn sau: (Đã include đầy đủ các thư viện chuẩn cần thiết)  
1
2
3
4
5
6
7
class IFace {  
public:  
8
9
class Face : public IFace {  
private:  
string shape;  
protected:  
string getShape();  
public:  
virtual void show()=0;  
virtual IFace* clone()=0;  
virtual ~IFace() {  
}
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
};  
Face(string sh) : shape(sh) {  
}
virtual void show() {  
cout << “Shape: ” << shape << endl;  
}
};  
Khoa Công nghệ thông tin – Trường ĐH Khoa học tự nhiên TP.HCM Trang 1/3  
a. Hãy viết lớp EyedFacecó:  
• Hai thuộc tính: shapekiểu chuỗi và eyeskiểu số nguyên;  
• Hai phương thức: show() xuất ra màn hình giá trị của cả 2 thuộc tính, và  
clone()trả về một đối tượng EyedFacemới là một bản sao của đối tượng này;  
• Một hàm tạo (constructor) nhận 2 tham số tương ứng với 2 thuộc tính.  
Yêu cầu: Tái sử dụng tối đa mã nguồn đã cho.  
b. Cho đoạn mã nguồn sau nối tiếp theo phần trên (cả đoạn cho sẵn lẫn của câu (a)):  
1
2
3
4
5
6
7
void testFace(IFace* fc) {  
8
int main() {  
Face fc;  
IFace* a[3] = { fc, fc->clone(), fc->clone() };  
9
for(int i=0; i<3; i++) {  
10  
11  
12  
13  
Face fc1(“Rectangle”);  
testFace(&fc1);  
return 0;  
a[i]->show();  
}
cout << “The same 3 lines?”;  
}
}
• Hàm main()có lỗi không thể chạy được. Hãy giải thích cụ thể lý do lỗi đó.  
• Hãy sửa lỗi của hàm main()để chạy được hàm testFace()và cho biết kết quả  
xuất ra màn hình của hàm main()đó.  
c. Hãy cải tiến chương trình bên trên (cả 2 câu (a) và (b)) như sau:  
• Hàm testFace()quản lý bộ nhớ chưa hiệu quả. Hãy sửa lại lỗi bộ nhớ đó.  
• Hãy viết thêm mã vào lớp EyedFaceđể đếm tổng số đối tượng (object,  
instance) của lớp đó và cập nhật mỗi khi tạo/huỷ đối tượng. Sau đó hãy thêm mã  
vào cuối hàm main()để kiểm tra xem còn bao nhiêu đối tượng EyedFacetrong  
bộ nhớ.  
Lưu ý: Chỉ cần ghi phần mã bổ sung và tên lớp/hàm, còn lại thì ghi ba chấm.  
Câu 3:  
Một công ty viễn thông cung cấp dịch vụ điện thoại và internet hỗn hợp cho khách hàng theo  
hình thức trả sau. Để sử dụng dịch vụ, khách hàng cần ký hợp đồng với công ty. Trong hợp  
đồng, cần có các thông tin cá nhân của khách hàng (họ tên, chứng minh nhân dân, địa chỉ) và  
thông tin về cách tính cước mà khách hàng chọn. Cuối mỗi tháng, khách hàng sẽ được thông  
báo cước tùy theo lượng sử dụng của mình tương ứng với gói cước đã đăng ký ban đầu.  
Hợp đồng với gói cước Basic có cách tính tiền như sau:  
Cước điện thoại = Thời gian gọi (phút) * Đơn giá gọi (1000 đồng/phút).  
Cước internet = Lưu lượng truy cập (MB) * Đơn giá truy cập (200 đồng/MB).  
Cước tổng = Cước điện thoại + Cước internet + 10% VAT.  
Khoa Công nghệ thông tin – Trường ĐH Khoa học tự nhiên TP.HCM Trang 2/3  
Để thu hút thêm đối tượng khách hàng thường xuyên sử dụng internet, công ty mở rộng thêm  
hai loại hợp đồng mới có cách tính cước linh hoạt như sau:  
Gói cước Cước  
điện thoại  
Cước internet  
• Nếu Lưu lượng truy cập ≤ Ngưỡng lưu lượng miễn phí  
ð Chỉ đóng Cước thuê bao.  
• Nếu Lưu lượng truy cập > Ngưỡng lưu lượng miễn phí  
ð Cước thuê bao + Cước lưu lượng vượt ngưỡng.  
Data Free  
Tương tự  
gói Basic  
Ghi chú:  
- Cước thuê bao và Ngưỡng lưu lượng miễn phí được công ty  
xác định lúc lập hợp đồng đăng ký cho khách hàng và được ghi  
trong mỗi hợp đồng: Có thể khác nhau tuỳ vào lúc lập hợp đồng  
nhưng không đổi sau đó.  
- Cước lưu lượng vượt ngưỡng tính theo công thức Cước  
internet của gói Basic.  
Data Fix  
Mức cố định 1.000.000 đồng  
Tương tự  
gói Basic  
+
Giảm 10%  
giá cước  
Hãy vẽ sơ đồ lớp và viết chương trình cho phép công ty quản lý các hợp đồng trong một danh  
sách duy nhất với 2 chức năng: cho phép khách hàng đăng ký hợp đồng mới và thông báo tiền  
cước cho tất cả khách hàng vào cuối tháng.  
Yêu cầu:  
• Áp dụng kế thừa và đa hình để tăng tính tái sử dụng và tính dễ mở rộng của chương trình.  
• Sơ đồ lớp: thể hiện các lớp đối tượng, quan hệ giữa các lớp, các thuộc tính, các hàm trong  
mỗi lớp.  
• Mã nguồn: ngôn ngữ C++.  
– GIÁM THỊ KHÔNG GIẢI THÍCH GÌ THÊM –  
– CHÚC CÁC BẠN LÀM BÀI TỐT –  
Khoa Công nghệ thông tin – Trường ĐH Khoa học tự nhiên TP.HCM Trang 3/3  
pdf 3 trang myanh 19720 Free
Bạn đang xem tài liệu "Đề thi lý thuyết cuối kỳ 1 môn Phương pháp lập trình hướng đối tượng - Năm học: 2014-2015 - Nguyễn Minh Huy", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfde_thi_ly_thuyet_cuoi_ky_1_mon_phuong_phap_lap_trinh_huong_d.pdf