You are on page 1of 21

Cả 3 lớp trên đều có biến và hàm giống hệt

nhau về nội dung. Tạo ra một lớp Nguoi có


chứa thông tin chung để sử dụng lại
KHÁI NIỆM KẾ THỪA

+ Tạo một lớp mới bằng cách phát triển lớp đã có.
+ Lớp mới kế thừa những gì đã có trong lớp cũ và
phát triển những tính năng mới.
• Lớp cũ: Lớp mẹ hay lớp cơ sở (base class)
• Lớp mới: Lớp con hay lớp dẫn xuất (derived class)

11/30/2021
Công dụng kế thừa

• Sử dụng lại code


• Giảm số code cần thiết
• Dễ bảo trì, sửa đổi về sau
• Rõ ràng hơn về mặt logic
trong thiết kế chương
trình

3
Xây dựng lớp dẫn xuất

Cú pháp
class <tên lớp dẫn xuất>:[kiểu dẫn xuất]<tên lớp cơ sở>
{
// Các thành phần của lớp dẫn xuất
};
• Tên lớp dẫn xuất: Tên lớp được cho kế thừa từ lớp khác
• Tên lớp cơ sở: Là tên lớp đã được định nghĩa trước đó để
cho lớp khác kế thừa. public
• Kiểu dẫn xuất có thể là: protected
private (ngầm định)
4
Quyền truy xuất
Kế thừa với Public và Private:
• Public: Các thành phần Public của lớp mẹ vẫn là Public trong lớp
con
• Private: Toàn bộ các thành phần của lớp mẹ trở thành Private của
lớp con
• Lớp con chuyển kiểu được thành lớp mẹ nhưng ngược lại không
được
• Tất cả các thành phần của lớp mẹ đều trở thành Private của lớp
con
Kế thừa với Protected:
Có thể sử dụng bởi các phương thức trong lớp dẫn xuất từ nó, nhưng
không sử dụng được từ ngoài các lớp đó. 5
Tổng hợp quyền truy xuất

Cột: Các kiểu kế thừa


Hàng: Phạm vi các biến/phương thức thành phần trong lớp mẹ
Kết quả: Phạm vị các biến/phương thức trong lớp dẫn xuất

6
Xét bài toán

- Xây dựng Lớp Công dân với các thông tin: họ và


tên, địa chỉ, số chứng minh thư.
Phương thức: nhập, hiện thị thông tin
- Xây dựng lớp Nhân viên kế thừa lớp Công dân
có thêm các thông tin: mã nhân viên, lương cơ bản,
phụ cấp.
- Xây dựng phương thức nhập và hiển thị thông tin.

7
Phân tích
- Xây dựng lớp Congdan gồm:

+ Thuộc tính: Họ và tên, địa chỉ, số chứng minh thư.

+ Phương thức: nhập, hiển thị

- Xây dựng lớp Nhân viên kế thừa lớp Congdan:

+ Thuộc tính: kế thừa thuộc tính lớp Congdan và thêm thuộc tính: mã

nhân viên, lương cơ bản, phụ cấp.

+ Phương thức nhập: kế thừa phương thức nhập của lớp công dân

sau đó yêu cầu nhập thêm mã nhân viên, lương cơ bản, phụ cấp.

+ Phương thức hiển thị: kế thừa phương thức hiển thị của lớp công

dân sau đó hiển thị thêm mã nhân viên, lương cơ bản, phụ cấp.
8
Xây dựng lớp Congdan

9
Xây dựng lớp Nhân viên kế thừa lớp Công dân

10
Chương trình chính

11/30/2021
Sử dụng mảng lưu n nhân viên

11/30/2021
Đa kế thừa và sự trùng tên trong kế thừa

LỚP D DẪN XUẤT TỪ A VÀ B

LỚP E DẪN XUẤT TỪ C

LỚP F DẪN XUẤT TỪ D

LỚP G DẪN XUẤT TỪ D VÀ E

LỚP H DẪN XUẤT TỪ E


Đa kế thừa và sự trùng tên trong kế thừa
Khái niệm đa kế thừa:
• Là khả năng xây dựng lớp dẫn xuất kế thừa từ nhiều hơn một
lớp cơ sở.
• Đa kế thừa có thể là tính năng rất mạnh nhưng đôi khi gây ra
một số vấn đề.
Xét trường hợp:
Giả sử trong lớp A có thành phần x
Trong lớp B cũng có thành phần x
Xây dựng lớp C kế thừa từ lớp A và B
Theo nguyên lý kế thừa: trong C sẽ có hai thành phần x
Vấn đề xảy ra:
Khi truy cập thành phần x trong C thì chương trình dịch không
biết thành phần x đó là của lớp A hay B
 Sự nhập nhằng trong kế thừa.
Để giải quyết: Ta xác định phạm vi tường minh
Đa kế thừa và sự trùng tên trong kế thừa
Khi kế thừa nhiều mức thì quy tắc đặt tên các thành phần:
- Tên lớp không được trùng lặp
- Tên các thành phần trong một lớp không được trùng lặp
- Tên các thành phần trong các lớp khác nhau có quyền trùng lặp
Để phân biệt các thành phần trùng tên trong lớp dẫn xuất cần sử
dụng thêm tên lớp.
Ví dụ:
C h;// h là đối tượng của lớp C dẫn xuất từ lớp A và lớp B
h.A::x; // thuôc tính x kế thừa từ lớp A
h.B::x;// thuộc tính x kế thừa từ lớp B
Gọi đến các thành phần của lớp dẫn xuất.

Thành phần của lớp dẫn xuất trong kế thừa gồm:


+ Các thành phần được khai báo thêm trong lớp dẫn xuất.
+ Các thành phần kế thừa từ lớp cơ sở.
Quy tắc sử dụng:
Chỉ rõ tên lớp của thành phần đó.

16
Ví dụ:
class A public:
{
private: void nhap()
int x; {cout<<“\n y=”;cin>>y};
public:
void nhap() }
{
void main()
cout<<“x=”;cin>>x;
{
}
}; B h;
class B:public A
{ h.B::nhap();//chỉ rõ lớp
private:
int y; h.A::nhap();
}
Code bài tóa xét vấn đề

Bài 1:
- Xây dựng Lớp Công dân với các thông tin: họ và tên,
địa chỉ, số chứng minh thư.
Phương thức: nhập, hiện thị thông tin
- Xây dựng lớp Nhân viên kế thừa lớp Công dân có
thêm các thông tin: mã nhân viên, lương cơ bản, phụ
cấp.
- Xây dựng phương thức nhập và hiển thị thông tin.
11/30/2021
BÀI THỰC HÀNH LỚP & ĐỐI TƯỢNG

Bài 2: Xây dựng lớp Person gồm các thông tin: Họ


và tên, Ngày sinh, Quê quán.
Xây dựng lớp dẫn xuất “Kỹ sư” kế thừa lớp Person,
lớp kỹ sư còn có các thông tin về: Ngành học, Năm
tốt nghiệp (int) và các phương thức:
• Phương thức nhập: nhập các thông tin của kỹ sư.
• Phương thức xuất: xuất các thông tin lên màn hình.

11/30/2021
BÀI THỰC HÀNH LỚP & ĐỐI TƯỢNG

Bài 3: Từ bài 2 hãy phát triển xây dựng


chương trình chính nhập vào một danh sách
các kỹ sư. In danh sách của các kỹ sư lên màn
hình và thông tin của các kỹ sư tốt nghiệp gần
đây nhất (năm tốt nghiệp lớn nhất).

11/30/2021
BÀI THỰC HÀNH LỚP & ĐỐI TƯỢNG
Bài 4. (sử dụng đa kế thừa)
- Xây dựng lớp Nguoi gồm các thông tin sau:
Hoten (char[50]), Ngaysinh (char[12]), Quequan
(char[100]) và phương thức nhập, xuất.
- Xây dựng lớp diem gồm: Thuộc tính: Diemtoan (int),
Diemly (int), Diemhoa (int) và phương thức nhập xuất.
- Xây dựng lớp sinhvien kế thừa từ 2 lớp trên có thêm
thuộc tính: Lop (char [30]), Tongdiem (int) và các
phương thức nhập, xuất từ bàn phím.
Yêu cầu: Xây dựng phương thức nhập và hiển thị thông
tin

You might also like