1. Trang chủ
  2. » Luận Văn - Báo Cáo

Môn lập trình hướng Đối tượng bài tập thực hành nhóm cuối môn

32 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 2,32 MB

Nội dung

IT002 - LAP TRINH HUONG BOI TUQNG getGiaTien f return giaTien; e - Sự kế thừa là một mức cao hơn của trừu tượng hóa, cung cấp một cơ chế gom chung các lớp có liên quan với nhau thành mộ

Trang 1

DAI HOC QUOC GIA THANH PHO HO CHi MINH TRUONG DAI HOC CONG NGHE: THONG TIN KHOA CONG NGHE PHAN MEM

⁄Z

MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG BÀI TẬP THỤC HÀNH NHÓM CUỐI MÔN GVHD: Nguyễn Ngọc Quí

Sinh viên thực hiện:

- _ Nguyễn Trần Hoài Bảo - 23520130

- Tran Gia Bao - 23520139

- Nguyễn TrọngAnh - 23520068

Trang 2

IT002 - LAP TRINH HUONG BOI TUQNG

NHAN XET CUA GIAO VIEN HUONG DAN

se _ ngay thang ndm 2024

Người nhận xét (Ký tên và ghi rõ hỌ tên)

2|Page

Trang 3

IT002 - LAP TRINH HUONG BOI TUQNG

MUC LUC Ndi dung bai lam

Trang 4

IT002 - LAP TRINH HUONG BOI TUQNG

thái nội bộ,

phương thức thực hiện nhiệm vụ nội

bộ

Thuộc tính và phương thức cần sử dụng bởi lớp con Ví dụ: thuộc tính lưu trữ thông tin chung cho lớp con, phương thức thực hiện nhiệm vụ chung cho lớp con

Thuộc tính và phương thức cần sử dụng bởi bên ngoài

Bảo mật thông tin, hạn chế việc truy xuất từ bên ngoài

Tái sử dụng

và cải tiến các phương thức từ lớp cha bởi lớp con,

Cho phép truy cập từ bất kỳ nơi nào trong

4|Page

Trang 5

IT002 - LAP TRINH HUONG BOI TUQNG

Ví dụ: thuộc | chương tính lưu trữ | trình

thông tin cần truy cập từ bên ngoài, phương thức cung cấp chức năng cho lớp khác sử dụng

cout << "Gia tien xe BMW: " << bmw.giaTien;

Microsoft Visual Studio Debu:

Trang 6

IT002 - LAP TRINH HUONG BOI TUQNG

getGiaTien() f return giaTien;

e - Sự kế thừa là một mức cao hơn của trừu tượng hóa, cung cấp một cơ chế gom chung các lớp có liên quan với nhau thành một mức khái quát hóa đặc trưng cho toàn bộ các lớp nói trên

Lợi ích của kế thừa:

e - Tái sử dụng mã: Kế thừa giúp giảm thiểu sự lặp lại trong code bằng cách cho phép các lớp con sử dụng lại các thuộc tính và phương thức đã được định nghĩa trong lớp cha Điều này giúp tiết kiệm thời gian và công sức cho lập trình viên, đồng thời giảm thiểu lỗi trong code

e - Tính phân cấp: Kế thừa giúp tạo ra cấu trúc phân cấp giữa các lớp, thể hiện mối quan hệ is-a (là một loại của) giữa các lớp Điều này giúp tổ chức code một cách logic và dễ hiểu hơn

¢ Tinh linh hoạt: Kế thừa giúp mở rộng chức năng của các lớp hiện có một cách dễ dàng bằng cách tạo ra các lớp con mới Điều này giúp code thích ứng tốt hơn với những thay đổi về yêu cầu

Tính đa hình: Kế thừa là nền tẳng cho đa hình trong OOP, cho phép các đối tượng của các lớp con phản hồi theo những cách khác nhau đối với cùng một phương thức

Trang 7

IT002 - LAP TRINH HUONG BOI TUQNG

Ví dụ về lợi ích của kế thừa

Giải thích về ví dụ minh họa:

e - Tái sử dụng mã nguồn: Khi lớp Coder kế thừa từ lớp Nhanvien, nó sẽ thừa hưởng tất cả các thành phần public và protected của lớp Nhanvien, bao gồm cả constructor Điều này giúp tránh việc lặp lại việc viết mã cho các thành phân mà Coder cũng cần sử dụng

e Mởrộng chức năng: Lớp Coder có thể mở rộng hoặc mở rộng lại các thành phần của lớp Nhanvien Trong trường hợp này, lớp Coder thêm một thành phần mới là NgonNguYeuThich, mà một nhân viên của loại này sẽ có một ngôn ngữ lập trình mà họ ưa thích Bằng cách này, chúng ta có thể mở rộng tính năng của lớp Nhanvien mà không cần phải thay đổi lớp gốc

12 Câu2

a) Hãy cho biết kết quả xuất ra màn hình khi thực thi đoạn chương trình trên Giải thích ngắn gọn tại sao có kết quả đó

Constructing A Constructing B Destructing B Destructing A

Giải thích cho hiện tượng này cần chia phần két qua thanh 2 phan la contructor

và detructor

Contructor:

Trong C++, khi thực hiện thừa kế một lớp dẫn xuất từ lớp cơ sở, tạo một contructor cho lớp dẫn xuất thì lớp cơ sở sẽ được khởi tạo trước sau đó mới khởi tạo lớp dẫn xuất Điều đó giống như việc phải tạo ra một đối tượng cơ sở sau đó thêm những tính năng riêng biệt của lớp dẫn xuất Đảm bảo đối tượng lớp cơ sở được xây dựng hoàn toàn trước khi trình tạo lớp con có thể truy cập các thành viên của nó

Constructing A Constructing B

Ví dụ: Hãy tưởng tượng việc xây dựng một ngôi nhà (lớp con) trên nền móng (lớp cơ sở) Bạn sẽ không bắt đầu xây dựng các bức tường (chức năng của lớp con) trước khi nền móng (lớp cơ sở) hoàn thành

Detructor:

Trang 8

IT002 - LAP TRINH HUONG BOI TUQNG

Bản chất của detructor là dọn dẹp các tài nguyên mà đối tượng này trong quá trình được dùng, thứ tự hủy này được cho là sẽ giúp việc “dọn dẹp” này diễn ra suôn sẻ và cho phép lớp dẫn xuất dọn sạch mọi tài nguyên cụ thể cho việc triển khai nó trước khi các hàm hủy của lớp cơ sở được gọi

Ví dụ: Khi muốn phá một ngôi nhà (lớp con) trên nên móng là lớp cơ sỞ, ta sẽ phải phá hủy ngôi nhà trước khi tiến hành phá đi nền móng của ngôi nhà đó b) Cho biét đoạn chương trình trên khi biên dịch có lỗi xảy ra hay không? Nếu có lỗi, hãy chỉ ra các lỗi đó và sửa lỗi để chương trình có thể thực thi được Chương trình trên có 3 lỗi sau:

- _ Đối tượng của lớp A được khai báo mà không có giá trị khởi tạo:

o_ Trong hàm main, đối tượng a của lớp A được khai báo nhưng không

có giá trị khởi tạo

o_ Để khắc phục, chúng ta cần khởi tạo a với một giá trị nào đó mang kiểu int ví du“ Aa(27);”

- Khong thé truy cap bién thanh vién private trong ham static f:

o_ Trong hàm f, chúng ta cố gắng truy cập vào biến thành viên x, nhưng nó không thể truy cập trực tiếp vì f là một hàm static trong lớp A

o_ Để truy cập x, ta cần tạo một đối tượng của lớp A trong hàm f và sau đó sử dụng biến x của lớp A đó

- _ Không thể truy cập biến thành viên private trong hàm f2:

o_ Trong hàm f2, cũng không thể truy cập trực tiếp vào biến thành viên x vì x là private

o_ Để truy cập x, chúng ta cần sử dụng hàm thành viên f2 thông qua một đối tượng của lớp A

- Stra lai:

8|Page

Trang 9

IT002 - LAP TRINH HUONG BOI TUQNG

f2C) ‡{

return x :

main() { a(10);

ESL GVE return 0;

13 Câu 3

Header SinhVien

Trang 10

IT002 - LAP TRINH HUONG BOI TUQNG

SinhVien

~SinhVien Nhap();

XetTotNghiep TinhDiemTrungBinh XuatThongTin

::XuatThongTin(} if

"Ma so sinh vi MaSoSinhVien

"Ho va ’ HoVaTen std::endl;

"Dia chi DiaChi std::endl;

ga TongSoTinChi << std: :endL;

7 DiemTrungBinh std: :endL;

TotNghiep ? tot nghiep" "Chua tot

10| Page

Trang 11

IT002 - LAP TRINH HUONG BOI TUQNG

Header DaiHoc

Trang 12

IT002 - LAP TRINH HUONG BOI TUQNG

Header CaoDang

12|Page

Trang 13

IT002 - LAP TRINH HUONG BOI TUQNG

Main.cpp

Trang 14

IT002 - LAP TRINH HUONG BOI TUQNG

14|Page

Trang 15

IT002 - LAP TRINH HUONG BOI TUQNG

Phân tích để ta thấy được sinh viên Đại Học và sinh viên Cao Đẳng có các thuộc tính giống nhau là: mã số sinh viên, họ tên, địa chỉ, tổng số tín chỉ, điểm trung bình Vậy nên ta sẽ xây dựng lớp cơ sở SinhVien gồm những thuộc tính này Lớp dẫn xuất DaiHoc sẽ có thêm tên luận văn, điểm luận văn

Lớp dẫn xuất CaoDag sẽ có thêm điểm thi tốt nghiệp

Từ class diagram ta thấy được mô hình kế thừa trong bài này

Trang 16

IT002 - LAP TRINH HUONG BOI TUQNG

© Sau khi nhập, xét xem trong numSinhVien có bao nhiêu sinh vien tốt nghiệp, không tốt nghiệp

e© _ Xuất thôn tin

Source code: [Google Drive|De1-Bai3

2.1 Câu I1: Trinh bày vé contructor, detructor

- Phương thức thiết lập (Constructor) và các dạng phương thức thiết lập;

- Phương thức huỷ bỏ (Destructor) trong lập trình hướng đối tượng

- Constructor mac dinh:

+ Là Constructor không có đối số Nó được gọi khi một đối tượng được tạo

mà không cung cấp bất kỳ đối số nào

+ Đối với constructor mặc định, nếu ta không cung cấp bất kỳ constructor nào, C++ sẽ tự sinh constructor mặc định là một phương thức rỗng

Ví dụ về constructor mặc định

- Constru

ctor cé

đối số:X + Là

Constructor

có tham số đầu vào để khởi tạo các thuộc tính của đối tượng

16|Page

Trang 17

IT002 - LAP TRINH HUONG BOI TUQNG

Ví dụ về

Constructor

có đối số

- _ Copy Constructor là một loại constructor đặc biệt trong C++ được sử dụng

để tạo một đối tượng mới như là một bản sao của một đối tượng đã tồn tại Nó được gọi khi:

+ Đây là phương thức thiết lập có tham số là tham chiếu đến đối tượng thuộc chính lớp này

+ Một đối tượng được khởi tạo từ một đối tượng khác cùng loại

+ Một đối tượng được truyền vào hàm bằng giá trị

+ Một đối tượng được trả về từ một hàm bằng giá trị

Trang 18

IT002 - LAP TRINH HUONG BOI TUQNG

Destructor trong class Person 2.2 Câu 2

a) Xây dựng class CDate

- Khai bao thuộc tính iDay, iMonth, iYear

- Khai bao constructor copy để tạo ra một sao mới của đối tượng CDate dùng cho mục đích thao tác mà không ảnh hưởng đến đối tượng CDate ban đầu

b) Operator >> và <<

- _ Hàm operator>> (toán tử nhập): Đây là hàm dùng để nhập dữ liệu từ một đối tượng istream Trong trường hợp này, nó sẽ nhập ba giá trị day, month, year của đối tượng CDate từ đầu vào

- _ Hàm operator<< (toán tử xuất): Dây là hàm dùng để xuất dữ liệu từ một đối tượng của lớp NgayThangNam ra một đối tượng ostream Trong

18|Page

Trang 19

IT002 - LAP TRINH HUONG BOI TUQNG

trường hợp này, nó sẽ xuất ba giá trị day, month, year của đối tượng CDate

ra đầu ra, thường là cùng một dòng và được ngăn cách bằng dấu /

c) Xây dựng operator+ và operator-

- _ Hàm trả về số ngày trong tháng:

+ Dùng để xử lí năm nhuận với tháng 2 có 29 ngày trong tháng và phân biệt tháng có 30 ngày với tháng có 31 ngày

+ Điều kiện để kiểm tra năm nhuận:

* y%4==0: Năm phải chia hết cho 4

« - (y% 100!=0 || y % 400 == 0): Năm không chia hết cho 100 trừ khi nó cũng chia hết cho 400

+ Các tháng 4, 6, 9 và 11 luôn có 30 ngày Còn các tháng 1, 3, 5, 7, 8, 10, 12 đều có 31 ngày

Trang 20

IT002 - LAP TRINH HUONG BOI TUQNG

+ Tiếp tục dùng if để kiểm tra xem tháng có vượt quá 12 hay không, nếu

có ta cần tăng năm lên và đặt giá trị tháng về lại tháng 1

- - ketQua.month ; giảm giá trị tháng đi 1

« - if(ketQua.month <= 0): Nếu tháng hiện tại nhỏ hơn hoặc bằng 0: ketQua.month = 12; đặt tháng về tháng 12

- _ ketQua.year ; giảm giá trị year đi 1

Trang 21

IT002 - LAP TRINH HUONG BOI TUQNG

d) Ham Main

- _ Tạo đối tượng CDate và dùng operator >> để nhập ngày thang nam muốn thao tác vào chương trình

- _ Nhập vào n ngày muốn dùng để cộng trừ /

- Dung operator + dé tinh két qua khi cOng n ngay vao ngày đã nhập rồi in két qua

- Ding operator -X để tính kết quả khi trừ n ngày vào ngày đã nhập rồi in kết quả

e) Kết quả chạy chương trình

Trang 22

IT002 - LAP TRINH HUONG BOI TUQNG

f) Source code: code

Câu 3: Xây dựng quản lý bài báo khoa học

Sơ đồ lớp:

BaiBao.h

22|Page

Trang 23

IT002 - LAP TRINH HUONG BOI TUQNG

X

BaiBao.cpp

Trang 24

IT002 - LAP TRINH HUONG BOI TUQNG

24|Page

Trang 25

IT002 - LAP TRINH HUONG BOI TUQNG

Trang 26

IT002 - LAP TRINH HUONG BOI TUQNG

DeTai.h

26|Page

Trang 27

IT002 - LAP TRINH HUONG BOI TUQNG

GiangVien.h

Trang 28

IT002 - LAP TRINH HUONG BOI TUQNG

Main.cpp

28|Page

Trang 29

IT002 - LAP TRINH HUONG BOI TUQNG

Khi khởi động

Trang 30

IT002 - LAP TRINH HUONG BOI TUQNG

30|Page

Trang 31

IT002 - LAP TRINH HUONG BOI TUQNG

Source code: [GITHUB]DE18-BAI3

Trang 32

IT002 - LAP TRINH HUONG BOI TUQNG

TAI LIEU THAM KHAO

32|Page

Ngày đăng: 11/12/2024, 10:24

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w