Tải bản đầy đủ (.doc) (4 trang)

5 kethua

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (61.7 KB, 4 trang )

HỌC VIỆN KỸ THẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN

ĐỀ CƯƠNG BÀI GIẢNG

HỌC PHẦN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bộ môn: Công nghệ phần mềm
Giáo viên: 1) Phạm Thị Bích Vân

Bài V: Cơ chế kế thừa
1. Thời lượng: 9 tiết (GV giảng: 3; bài tập: 3; thực hành: 3)
2. Mục đích, yêu cầu: Giới thiệu sinh viên khái niệm ý nghĩa của kế thừa, đơn kế thừa, đa kế thừa. Cách
xây dựng lớp kế thừa.
3. Nội dung:
a) Nội dung chi tiết:
• Giới thiệu




Kế thừa là khả năng cho phép xây dựng một lớp mới:
+ Được thừa hưởng các thành phần từ một hay nhiều lớp đã có (lớp cơ sở).
+ Trong lớp ta có thể bổ sung thêm các thành phần hoặc định nghĩa lại các thành phần
Ví dụ.
+ Xây dựng lớp PS1 {ts, ms, nhập, in, tối giản}
+ Lớp PS2 {ts, ms, nhập, in, tối giản, cộng, trừ, nhân chia phân số}
Kế thừa đơn.



Chỉ có một lớp cơ sở


Các lớp cơ sở và các lớp dẫn xuất.



Sự kế thừa hình thành các cấu trúc phân cấp giống cây (còn gọi là cây phả hệ). Một lớp cơ sở tồn



tại trong một phân cấp quan hệ với lớp dẫn xuất của nó.
Một lớp có thể là một lớp cơ sở mà cung cấp các thuộc tính và các hành vi cho các lớp khác,



hoặc là lớp trở thành một lớp dẫn xuất mà kế thừa các thuộc tính và các hành vi.
Lớp được kế thừa gọi là lớp cơ sở (lớp cha).



Lớp kế thừa gọi là lớp dẫn xuất (lớp con).



Ví dụ: Phân cấp lớp Shape



Các thành viên protected




Các thành viên public của một lớp cơ sở được truy cập bởi tất cả các hàm trong chương trình.



Các thành viên private của một lớp cơ sở chỉ được truy cập bởi các hàm thành viên và các hàm
friend của lớp cơ sở.
Truy cập protected phục vụ như một mức trung gian của sự bảo vệ giữa truy cập public và truy



cập private. Các thành viên protected của một lớp cơ sở có thể chỉ được truy cập bởi các hàm
thành viên và các hàm friend của lớp cơ sở và bởi các hàm thành viên và các hàm friend của
lớp dẫn xuất.
Các thành viên lớp dẫn xuất kế thừa public có thể truy xuất tới các thành viên public và
protected bằng cách sử dụng các tên thành viên.

Bộ môn Công nghệ phần mềm




Ép kiểu các con trỏ lớp cơ sở tới các con trỏ lớp dẫn xuất.



Một đối tượng của lớp dẫn xuất kế thừa public có thể ép về đối tượng thuộc lớp cơ sở, ngược lại
không đúng. Tuy nhiên có thể sử dụng ép kiểu để chuyển đổi một con trỏ lớp cơ sở thành một
con trỏ lớp dẫn xuất
Định nghĩa lại các thành viên lớp cơ sở trong một lớp dẫn xuất.




Một lớp dẫn xuất có thể định nghĩa lại một hàm thành viên lớp cơ sở. Điều này được gọi là
overriding. Khi hàm đó được đề cập bởi tên trong lớp dẫn xuất, phiên bản của lớp dẫn xuất được
chọn một cách tự động. Toán tử định phạm vi có thể sử dụng để truy cập phiên bản của lớp cơ sở
từ lớp dẫn xuất.
Các lớp cơ sở public, protected, private



Khi dẫn xuất một lớp từ một lớp cơ sở, lớp cơ sở có thể được kế thừa là public, protected và
private.

class <drived_class_name> : <type_of_inheritance> <base_class_name>
{………………..
};
Trong đó type_of_inheritance là public, protected hoặc private. Mặc định là private.
− Khi dẫn xuất một lớp từ một lớp cơ sở public, các thành viên public của lớp cơ sở trở thành các



thành viên public của lớp dẫn xuất, và các thành viên protected của lớp cơ sở trở thành các
thành viên protected của lớp dẫn xuất. Các thành viên private của lớp cơ sở không bao giờ
được truy cập trực tiếp từ một lớp dẫn xuất.
Khi dẫn xuất một lớp từ một lớp cơ sở protected, các thành viên public và protected của lớp cơ



sở trở thành các thành viên protected của lớp dẫn xuất. Khi dẫn xuất một lớp từ một lớp cơ sở
private, các thành viên public và protected của lớp cơ sở trở thành các thành viên private của

lớp dẫn xuất.
Các constructor và destructor và lớp dẫn xuất



Khi một đối tượng của lớp dẫn xuất được khởi động, constructor lớp cơ sở phải được gọi để khởi



tạo các thành viên lớp cơ sở của lớp dẫn xuất. Nếu constructor lớp dẫn bị bỏ qua, constructor
mặc định lớp dẫn gọi constructor lớp cơ sở.
Các destructor được gọi theo thứ tự ngược lại thứ tự gọi các constructor, vì thế destructor lớp



dẫn xuất được gọi trước destructor lớp cơ sở của nó.
Chuyển đổi ngầm định đối tượng lớp dẫn xuất sang đối tượng lớp cơ sở



Một con trỏ trỏ tới một đối tượng lớp dẫn xuất có thể được chuyển đổi ngầm định thành một con
trỏ trỏ tới một đối tượng lớp cơ sở bởi vì một đối tượng lớp dẫn xuất là một đối tượng lớp cơ sở.
Đa kế thừa



Một lớp có thể được dẫn xuất từ nhiều lớp cơ sở, sự dẫn xuất như vậy được gọi là đa kế thừa. Đa




kế thừa có nghĩa là một lớp dẫn xuất kế thừa các thành viên của các lớp cơ sở khác nhau. Khả
năng mạnh này khuyến khích các dạng quan trọng của việc sử dụng lại phần mềm, nhưng có thể
sinh ra các vấn đề nhập nhằng.
Cú pháp của một lớp kế thừa nhiều lớp cơ sở:
class <drived_class_name> : <type_of_inheritance> <base_class_name1> ,
<type_of_inheritance> <base_class_name2>, …
{
………………..
};

Bộ môn Công nghệ phần mềm




Các lớp cơ sở ảo



Đôi khi trong lập trình một lớp A là cơ sở của lớp B,C. Lớp D lại kế thừa từ B,C. Khi đó khi từ



lớp D ta gọi đến thành phần của lớp A khi đó chương trình có sự nhập nhằng.
Giải pháp: Khai báo lớp A là lớp cơ sở ảo với từ khóa virtual. Khi Hai lớp cơ sở A ở trên bất giờ

sẽ trở thành một lớp cơ sở A duy nhất cho bất kỳ lớp dẫn xuất nào từ B và C. Điều này có nghĩa
là D chỉ có một cơ sở của lớp A, vì vậy tránh được sự nhập nhằng.
b) Nội dung thảo luận: Sự khác nhau của các kiểu kế thừa, hàm khởi tạo trong kế thừa.
c) Nội dung tự học: Xây dựng các lớp kế thừa, tạo các hàm tạo của lớp dẫn xuất.

d) Bài tập (bắt buộc, mở rộng):
Bài 1:
Cài đặt lớp PS1 gồm có:
Dữ liệu: tử số, mẫu số
Phương thức: nhập ps(mẫu khác 0), in ps, tối giản, cộng 2 ps
Chương trình chính: nhập 2 ps ab, in ra c=a+b
Cài đặt lớp PS2 kế thừa PS1 và bổ sung:
Dữ liệu: dấu của phân số
Phương thức: phép so sánh: ==, !=
Chương trình chính: nhập 2 ps, thông báo kết quả so sánh
Bài 2:
Cài đặt lớp SP1 gồm có:
Dữ liệu: phần thực, phần ảo
Phương thức: nhập,in
Chương trình chính: nhập 2 sp ab, in ra a, b
Cài đặt lớp SP2 kế thừa SP1 và bổ sung:
Dữ liệu:
Phương thức: toán tử +, -, *, /, phép so sánh: ==, !=, >, >=, <, <=, ++, -Chương trình chính: nhập 2 sp, thông báo kết quả so sánh, các phép tính a+b, a-b, a*b, a/c
Bài 3:
Cài đặt lớp NGUOI gồm có:
Dữ liệu: họ tên, ngày sinh, địa chỉ
Phương thức: nhập,in một người
Cài đặt lớp NV kế thừa NGUOI và bổ sung:
Dữ liệu: phòng ban, hệ số lương, phụ cấp
Phương thức: định nghĩa lại pt nhập, in để có đầy đủ thông tin
Chương trình chính: nhập mảng các NV có n người (n<20), in danh sách nhân viên
Bài 4:
Cài đặt lớp People
Dữ liệu: họ tên
Cài đặt lớp Student kế thừa lớp People có:

Dữ liệu: SIS (Mã sinh viên), khoa, điểm trung bình
Thêm các thuộc tính cho các dữ liệu thành viên trên
Viết các phương thức hiển thị thông tin của sinh viên
Bài 5:
Cài đặt lớp có tên là Book chứa những dữ liệu cần thiết để quản lý sách trong một cửa hàng sách
Dữ liêu: tên sách, tác giả, nhà xuất bản, giá sách, số lượng hiện có và tổng số các loại sách đang có
trong cửa hàng.
Bộ môn Công nghệ phần mềm


Chương trình chính cho phép người dùng nhập vào từng cuốn sách, lưu các đối tượng sách trong một
mảng, hiển thị tất cả các sách và bán đi một cuốn sách bằng cách giảm tổng số lượng cuốn sách đi 1.
4. Tài liệu tham khảo (sách, báo – chi tiết đến chương, mục, trang)
• Lập trình hướng đối tượng với C++ / Lê Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn
Thanh Thủy (Chủ biên), - Hà Nội : Khoa học và Kỹ thuật, 2009. -346 trang. Chương V.
• Giáo trình C++ & lập trình hướng đối tượng / Phạm Văn Ất (Chủ biên), Lê Trường Thông. – Hà
Nội : Hồng Đức, 2009. -495 trang. Chương 5.
• Object-Oriented Programming in C++ (4th Edition) / Robert Lafore. Sams Publishing, 2002.
Chapter 9.
5. Câu hỏi ôn tập
- Ý nghĩa từ khóa định nghĩa phạm vi truy cập protected?
- Có các kiểu kế thừa nào? Ý nghĩa của các kiểu?
- Thế nào là đơn kế thừa?
- Thế nào là đa kế thừa?
- Cách định nghĩa lại các thành viên của lớp cơ sở trong lớp dẫn xuất?
- Cách xây dựng các hàm khởi tạo của lớp dẫn xuất?
- Thế nào là lớp cơ sở ảo?

Bộ môn Công nghệ phần mềm




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×