Bài tập nâng cao C++ dành cho người mới bắt đầu. Lập trình hướng đối tượng xu thế phát triển của nhân loại. Full bộ chi tiết câu hỏi, bài giảng đính kèm. aaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccdddddddddddddddddddddddđ
Trang 1TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP THỰC HÀNH
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Biên soạn:
Tôn Quang Toại
TP.HỒ CHÍ MINH, 2016
Trang 2MỤC LỤC
BUỔI 1 LỚP VÀ ĐỐI TƯỢNG (1/3) 1
BUỔI 2 LỚP VÀ ĐỐI TƯỢNG (2/3) 5
BUỔI 3 LỚP VÀ ĐỐI TƯỢNG (3/3) 9
BUỔI 4 OPERATOR OVERLOADING 12
BUỔI 5 THỪA KẾ 15
BUỔI 6 ĐA HÌNH (1/2) 19
BUỔI 7 ĐA HÌNH (2/2) 25
BUỔI 8 INTERFACE 27
BUỔI 9 XỬ LÝ NGOẠI LỆ 29
Kiểm tra
Trang 3BUỔI 1 LỚP VÀ ĐỐI TƯỢNG (1/3)
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1 Hiểu được nguyên tắc đầu tiên (trụ cột đầu tiên) của lập trình hướng đối
tượng: Đóng gói (Encapsulation)
2 Hiểu cách mô hình các đối tượng/lớp đơn giản trong thế giới thực thànhcác đối tượng/lớp trong lập trình
3 Biết và Hiểu rõ các thành phần cơ bản của một lớp
a Fields
b Constructors
c Methods
4 Có kỹ năng xây dựng các lớp đơn giản, cùng với các phương thức tính
toán đơn giản thông qua ngôn ngữ lập trình C#
Bài 1 Xây dựng lớp Account
Một tài khoản ngân hàng của khách hàng có một số thông tin: Mã số tài khoản,
số tiền
Khai báo các fields
Thêm phương thức constructor để tạo đối tượng tài khoản có 2 thông tin
trên
Thêm các phương thức Get/Set cho các fields
Viết phương thức Main()
Dùng constructor để tạo 1 tài khoản, sau đó xuất thông tin tài khoản lênmàn hình
Thay đổi số tiền trong tài khoản, sau đó xuất lại thông tin tài khoản lênmàn hình
Trang 4Bài 2 Xây dựng lớp Book
Một quyển sách chứa một số thông tin: mã sách, tên sách, giá sách, giảm giá
Khai báo các fields
Thêm các phương thức constructors để:
o Tạo đối tượng sách có mã sách và tên sách
o Tạo đối tượng sách có đầy đủ 4 thông tin trên
Thêm các phương thức Get/Set cho các fields
Thêm phương thức tính giá bán của 1 quyển sách, biết rằng:
Giá bán một quyển sách = Giá sách – Giảm giá
Viết phương thức Main()
Dùng constructor để tạo 1 quyển sách
In thông tin quyển sách ra màn hình, sau đó tính và xuất giá bán củaquyển sách đó
Thay đổi Giảm giá, sau đó in thông tin quyển sách ra màn hình
Tính và xuất giá bán mới của quyển sách đó
Trang 5- Ten sach: Mindset
- Gia sach: 70000
- Giam gia: 24000
Gia ban cua sach: 46000
Bài 3 Xây dựng lớp Student
Một sinh viên có một số thông tin: mã sinh viên, họ tên, năm sinh, địa chỉ
Khai báo các fields
Thêm các constructors để:
o Tạo đối tượng có mã sinh viên và tên sinh viên
o Tạo đối tượng có đầy đủ 4 thông tin trên
Thêm các phương thức Get/Set cho các fields
Thêm phương thức tính tuổi của sinh viên
Viết phương thức Main() dùng constructor để tạo 1 sinh viên, sau đó in thông
tin sinh viên ra màn hình và tính tuổi của sinh viên đó
- Dia chi: 123 Nguyen Trai, P10, Q5, TP.HCM
Tuoi cua sinh vien: 19 tuoi
Bài 4 Xây dựng lớp Circle
Một hình tròn có bán kính r
Khai báo field
Thêm các constructors:
o Constructor dùng để tạo đối tượng hình tròn có bán kính r
o Constructor không có tham số (còn gọi là parameterless
constructor hay default constructor) để tạo đối tượng hình tròn
Trang 6 Thêm các phương thức Get/Set cho field
Thêm phương thức Input() để nhập thông tin của hình tròn từ bàn phím
Thêm phương thức Output() để xuất thông tin của hình tròn ra màn hình
Thêm phương thức tính diện tích của hình tròn: S=π r2
Thêm phương thức tính chu vi của hình tròn: C=2 π r
Viết phương thức Main()
Dùng default constructor để tạo 1 hình tròn có giá trị mặc định
Xuất thông tin hình tròn ra màn hình
Nhap hinh tron:
Nhap ban kinh r: 16
Thong tin hinh tron:
Ban kinh r: 16
Dien tich hinh tron: …
Chu vi hinh tron: …
Trang 7BUỔI 2 LỚP VÀ ĐỐI TƯỢNG (2/3)
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1 Có kỹ năng sử dụng các properties
2 Có kỹ năng sử dụng các lớp đã xây dựng:
a Tạo Mảng các đối tượng của lớp đã xây dựng
b Tạo Field của lớp có kiểu là lớp khác
Bài 1 Dùng property với lớp Account
Trong lớp Account thay thế các phương thức Get/Set thành các properties Và
kiểm tra tính hợp lệ trước khi thay đổi dữ liệu của field
Số tiền phải là số dương
Bài 2 Dùng properties với lớp Book
Trong lớp Book thay thế các phương thức Get/Set thành properties Và kiểm
tra tính hợp lệ trước khi thay đổi dữ liệu của các fields
Tên sách không được là chuỗi rỗng
Giá sách phải là số dương
Giảm giá không được là số âm
Bài 3 Dùng properties với lớp Student
Trong lớp Student thay thế các phương thức Get/Set thành properties Và kiểm
tra tính hợp lệ trước khi thay đổi dữ liệu của các fields
Họ tên không được là chuỗi rỗng
Năm sinh là phải là số dương
Địa chỉ không được là chuỗi rỗng
Trang 8Bài 4 Dùng properties với lớp Circle
Trong lớp Circle thay thế các phương thức Get/Set thành properties Và kiểm
tra tính hợp lệ trước khi thay đổi dữ liệu của field
Bán kính r là phải là số không âm
Bài 5 Sử dụng mảng đối tượng của lớp Circle
Tạo project mới, sau đó thêm lớp Circle ở project trên vào project này
Viết phương thức Main()
Khai báo và nhập n hình tròn (số n được nhập từ bàn phím)
Xuất thông tin n hình tròn đã nhập ra màn hình
Tính và xuất diện tích của từng hình tròn trên
Tìm diện tích lớn nhất trong n hình tròn trên
Ví dụ:
Nhap so duong tron n: 3
Nhap duong tron thu 1:
Dien tich cua 3 duong tron:
Dien tich duong tron 1: …
Dien tich duong tron 2: …
Dien tich duong tron 3: …
Dien tich duong tron lon nhat: …
Trang 9Bài 6 Tạo lớp Color
Trên máy tính, màu (color) được biểu diễn bằng các giá trị red, green, blue (có giá trị từ 0 đến 255) và alpha (hay transparency, mức độ trong suốt của màu,
cũng có giá trị từ 0 đến 255, với 0 là hoàn toàn trong suốt, 255 là đậm đặc) Hãy
tạo lớp Color
Thêm các instance variables (một cách gọi khác của fields)
Thêm các constructors
o Constructor không tham số (default constructor) để tạo đối
tượng sao cho các fields: red, green, blue, alpha có giá trị mặc định
là 255 (màu trắng)
o Constructor có tham số để tạo đối tượng màu có 4 thông tin trên
o Constructor có tham số là đối tượng color cho trước Constructor
này có nhiệm vụ tạo đối tượng màu và sao chép thông tin của đốitượng color trong tham số vào đối tượng mới tạo (Người ta còn gọi
constructor này là Copy constructor)
public Color() {}
public Color(int red, int green, int blue, int alpha) {}
public Color(Color color) {}
Thêm các properties cho các fields với các ràng buộc của các field như
đã mô tả
Thêm phương thức tính giá trị mức xám (grayscale) của màu (grayscalebằng trung bình của red, green, blue)
Bài 7 Xây dựng lớp Ball, sử dụng lớp Color làm field
Trái banh có các fields: kích thước (size hay radius), màu sắc (color) và số lần ném banh (timeOfThrown)
Khai báo các fields cho Ball (field color nên dùng kiểu Color đã tạo
trong bài trước)
Thêm các constructors
Trang 10o Constructor không tham số để tạo đối tượng Ball có những thông
tin mặc định: kích thước bằng 1, số lần ném banh là 0, màu là màumặc định
o Constructor có tham số để tạo đối tượng có 3 thông tin trên
Thêm các properties cho các fields (nhớ ràng buộc dữ liệu hợp lý)
Thêm phương thức Pop (Pop nghĩa là mô hình việc làm cho trái banh nổ):
Banh nổ nghĩa là thay đổi size thành giá trị 0
Thêm phương thức Throw (Throw nghĩa là mô hình việc ném trái banh):
Ném banh nghĩa là cộng 1 vào số lần ném (nhưng chỉ cộng khi banh chưa
bị nổ)
Viết phương thức Input() để nhập thông tin trái banh
Viết phương thức Output() xuất thông tin trái banh
Viết phương thức Main()
Khai báo và tạo n trái banh có giá trị mặc định (số n được nhập từ bànphím)
Nhập lại thông tin trái banh thứ 0
Xuất thông tin n trái banh ra màn hình (kiểm tra xem dữ liệu có như mongđợi không)
Ném trái banh thứ 1, 2
Cho nổ trái banh thứ 1 và nén trái banh thứ 1
In số lần nén của các trái banh
Trang 11BUỔI 3 LỚP VÀ ĐỐI TƯỢNG (3/3)
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
Có kỹ năng sử dụng các lớp đã xây dựng:
a Tạo Field của lớp là mảng/danh sách có kiểu là lớp khác
b Tạo Phương thức có tham số là lớp
c Tạo Phương thức có kiểu trả về là lớp
Bài 1 Xây dựng lớp Account
Một tài khoản ngân hàng của khách hàng có một số thông tin: Mã số tài khoản,
o Tạo đối tượng tài khoản có 2 thông tin trên
Thêm các properties cho các fields
Thêm phương thức Input() để nhập thông tin tài khoản từ bàn phím
Thêm phương thức Output() để xuất thông tin tài khoản ra màn hình
Bài 2 Xây dựng lớp Customer sử dụng lớp Account
Một khách hàng của ngân hàng có một số thông tin sau: Mã số khách hàng, số Chứng minh nhân dân, địa chỉ Ngoài ra, một khách hàng có thể có nhiều tài
Trang 12o Constructor tạo đối tượng khi có mã số khách hàng
Thêm các properties cho các fields
Thêm phương thức Input() để nhập thông tin khách hàng từ bàn phím
(Không nhập danh sách tài khoản của khách hàng)
Thêm phương thức Output() để xuất thông tin khách hàng ra màn hình
(Bao gồm cả thông tin các tài khoản của khách hành)
Viết phương thức Main()
Nhập thông tin của một khách hàng
Xuất thông tin khách hàng đã nhập lên màn hình
Bài 3 Phương thức có tham số là lớp đã định nghĩa
Trong lớp Customer, cài đặt phương thức để thêm một tài khoản đã nhập củakhách hàng vào danh sách các tài khoản của khách hàng
public void AddAcount(Account account)
Viết phương thức Main()
Nhập thông tin của một tài khoản
Thêm tài khoản đã nhập vào danh sách tài khoản của khách hàng
Xuất thông tin khách hàng đã nhập lên màn hình (kiểm tra xem có thôngtin tài khoản vừa mới thêm vào chưa)
Bài 4 Phương thức có kiểu trả về là kiểu lớp
Trong lớp Customer, viết phương thức tìm kiếm tài khoản có mã số tài khoảncho trước
Account SearchAccount(string accountNo)
Viết phương thức Main()
Nhập mã số tài khoản của khách hàng
Trang 13 Kiểm tra xem khách hàng có tài khoản đó không? Nếu có xuất thông tincủa tài khoản
Trang 14BUỔI 4 OPERATOR OVERLOADING
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1 Hiểu được ý nghĩa của operator overloading
2 Biết được các phép toán được overload và phép toán không được overload
3 Có kỹ năng sử dụng operator overloading
Bài 1 Xây dựng lớp Vector
Một vector trong không gian 2 chiều gồm có 2 phần x và y
Tổng 2 vector được định nghĩa : c=⃗a+⃗b=(1+3,2+4 )=(4, 6)⃗
Hiệu của 2 vector được định nghĩa : d=⃗a−⃗b=(1−3,2−4 )=(−2,−2)⃗
Hãy xây dựng lớp Vector:
Khai báo cáo fields
Viết default constructor tạo vector (0, 0)
Viết constructor tạo vector có 2 thành phần trên
Cài đặt các properties
Overload phép toán cộng 2 vector
Overload phép toán trừ 2 vector
Viết phương thức Main() tạo 2 đối tượng vector, tính tổng và hiệu 2 vector đó,
sau đó xuất kết quả ra màn hình để kiểm tra kết quả đúng hay không
Bài 2 Overload phép toán so sánh
Hai vector được gọi là bằng nhau khi các thành phần của 2 vector tương ứngbằng nhau, nghĩa là với: a=(a⃗ 1, a2); b=(b⃗ 1,b2);
Trang 15Trong lớp vector hãy overload phép toán so sánh bằng “==” giữa hai vector
Viết phương thức Main() kiểm tra phép toán “==” vừa overload
Bài 3 Cộng số thực với vector
Cộng vector với một số thực được định nghĩa như sau:
Cho a=(a⃗ 1, a2) và số thực k
⃗
a+k=(a1+k ,a2+k )
Trong lớp vector hãy
Overload phép toán cộng vector với 1 số thực
Overload phép toán cộng 1 số thực với 1 vector
Bài 4 Lớp Phân số
Phân số (PhanSo) gồm có tử số và mẫu số Hãy xây dựng lớp phân số:
Khai báo các fields
Constructor không tham số để tạo phân số 0/1
Constructor có tham số để tạo phân số có 2 thông tin trên
Cài đặt các Properties
Phương thức nhập phân số từ bàn phím
Phương thức xuất phân số ra màn hình
Overload các phép toán cộng (+), trừ (-) hai phân số
Overload các phép toán nhân (*), chia (/) hai phân số
Viết phương thức Main() nhập vào 2 phân số, tính tổng, hiệu, tích, thương của 2
Trang 161/2 - 3/2 = -2/2
1/2 * 3/2 = 3/4
1/2 / 3/2 = 2/6
Bài 5 Sử dụng lớp Phân số
Sử dụng lớp phân số trên thực hiện các chức năng
Nhập n phân số (n nhập từ bàn phím) (Có thể dùng List nếu đã học)
Tính tổng n phân số và xuất kết quả ra màn hình
Bài 6 Các phép toán so sánh trong phân số
Trong lớp phân số, hãy cài đặt thêm các phép toán so sánh
Trong phương thức Main()
Nhập n phân số
Sắp xếp các phân số tăng dần và xuất ra màn hình để kiểm chứng
Tìm 1 phân số có giá trị lớn nhất và xuất ra màn hình phân số này
Trang 17BUỔI 5 THỪA KẾ
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1 Hiểu được nguyên tắc thứ hai (trụ cột thứ hai) của lập trình hướng đối
tương: thừa kế (inheritance)
2 Xây dựng lớp mới (lớp dẫn xuất) bằng cách thừa kế từ lớp cũ (lớp cơ sở)
và thêm các fields, properties và method mới
3 Sử dụng constructor của lớp cơ sở
4 Sử dụng constructor của lớp cơ sở
Viết default constructor để tạo đối tượng có giá trị mặc định
Viết parameter constructor để tạo đối tượng có 2 thông tin trên
Bài 2 Lớp dẫn xuất
Chúng ta cần quản lý thông tin của một sinh viên (Student) trên máy tính Sinh
viên (Student) cũng là một người (Person) thông thường, nghĩa là cũng có các
thông tin như: tên (name), email Tuy nhiên, sinh viên còn có thêm thông tin
khác là mã sinh viên (StudentID)
Hãy xây dựng lớp Student
Lớp Student thừa kế lớp Person
Khai báo Field
Cài đặt Property
Viết default constructor để tạo đối tượng có
Trang 18 Viết parameter constructor để tạo đối tượng có 3 thông tin trên
Viết phương thức Main() tạo 1 đối tượng sinh viên (dùng constructor để tạo) và
xuất thông tin sinh viên lên màn hình
Bài 3 Gọi constructor của lớp cơ sở
Trong bài 2, chỉnh sửa lại parameter constructor của lớp Student sao cho constructor này có thể gọi constructor của lớp cơ sở (Person) để nhờ khởi tạo
name và email khi tạo đối tượng sinh viên.
Bài 4 Xây dựng lớp Tam giác và lớp Chữ nhật
Lớp cơ sở: Lớp hình (Shape)
Xây dựng lớp hình (Shape) dùng để mô hình hóa một hình gồm có thông tin chiều cao (height) và chiều rộng (width) của hình
Khai báo các Fields
Cài đặt default constructor để tạo đối tượng có giá trị mặc định
Cài đặt parameter constructors để tạo đối tượng có 3 thông tin trên
Cài đặt các properties
Lớp dẫn xuất: Xây dựng lớp tam giác (Triangle) và lớp hình chữ nhật
(Rectangle)
Hình Tam giác và hình chữ nhật cũng là một hình có các thông tin như sau:
Trong đó tham số base của tam giác có thể coi như là width
Xây dựng 2 lớp dẫn xuất là lớp hình tam giác (Triangle) và lớp hình chữ nhật (Rectangle) thừa kế từ lớp Shape
heightheight
widthbase
Trang 19 Cài đặt default constructor
Cài đặt parameter constructors
Cài đặt các properties (Chú ý: lớp Triangle tạo property có tên là Base thay vì Width)
Cài đặt thêm phương thức Area() để tính diện tích các hình tương ứng
S tam giác= 1
2× height × width
S chữ nhật=height ×width
Bài 5 Xây dựng lớp dựa trên sơ đồ
Cho sơ đồ lớp như sau
Trang 20 Hãy xây dựng các lớp thừa kế theo sơ đồ trên
Product có constructor với 2 tham số
Software có constructor với 3 tham số
Hardware có constructor với 3 tham số
Tạo đối tượng Software và xuất thông tin đối tượng ra màn hình
Tạo đối tượng Hardware và xuất thông tin đối tượng ra màn hình
Trang 21BUỔI 6 ĐA HÌNH (1/2)
MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1 Hiểu được nguyên tắc thứ ba (trụ cột thứ ba) của lập trình hướng đối
tượng: đa hình (polymorphím) - sau đóng gói (encapsulation) và thừa kế
(inheritance)
2 Có kỹ năng thực hiện các bước xây dựng lớp/phương thức có tính đa hình
a Hiểu được từ khóa virtual trong lớp cơ sở
b Có kỹ năng override method của lớp dẫn xuất
3 Sử dụng các lớp/phương thức có tính đa hình
Bài 1 Biết và Hiểu các bước xây dựng phương thức có tính đa hình
Có 3 loại xe hơi (Car): LandRover, Ford, Honda cần mô hình trên máy tính
LandRover Ford Honda
Mỗi loại xe trên tương ứng với một lớp: Lớp LandRover, lớp Ford, lớp Honda
Mỗi loại xe khi di chuyển (Move) sẽ dùng những động cơ khác nhau
Xe LandRover : Dùng động cơ 2.0 L engine
Xe Ford : Dùng động cơ V engine
Xe Honda : Dùng động cơ i-vtec engine
Như vậy, mỗi lớp có phương thức Move() riêng để xuất ra màn hình thông tin
động cơ của xe mình đang dùng