Đề 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
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:
de_thi_ly_thuyet_cuoi_ky_1_mon_phuong_phap_lap_trinh_huong_d.pdf

