You are on page 1of 26

LOGO

Lập trình Hướng đối tượng


C++
KẾ THỪA (INHERITANCE)

Nguoi Sinh viên Nhân viên


Ho ten Ho ten Ho ten
Dia chi Dia chi Dia chi
Tuoi Tuoi Tuoi
An() Diem Chucvu
Uong() An() Phonglamviec
Di() Uong() An()
(Chay) Di() Uong()
(Chay) Di()
DiemTB() (Chay)
Tinhluong()
Tamung()
KẾ THỪA (INHERITANCE)
SinhVien
Diem
Nguoi
DiemTB()
Ho ten
Dia chi
Tuoi KẾ THỪA

An() NhanVien
Uong()
Chucvu
Di()
(Chay)
Phonglamviec - Sử dụng lại code
Tinhluong() - Giảm số lượng code
Tamung() cần viết.
- Dễ sửa đổi, cập nhật
- Rõ rang hơn, logic
hơn trong thiết kế
chương trình
KẾ THỪA (INHERITANCE)
 Khái niệm:
Kế thừa cho phép định nghĩa các lớp mới
từ các lớp đã có.

Lớp cha (Lớp


Nguoi
cơ sở)

Lớp con (Lớp


dẫn xuất) SinhVien NhanVien
KẾ THỪA (INHERITANCE)
 Đặc điểm:
 Kế thừa là một trong các khái niệm cơ sở của
phương pháp lập trình hướng đối tượng.
 Lớp dẫn xuất sẽ kế thừa một số thành phần
(thuộc tính và phương thức) của lớp cơ sở,
đồng thời có thêm những thành phần mới.

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Phân loại:
 Đơn kế thừa: Một lớp kế thừa từ một lớp khác
 Đa kế thừa: Một lớp kế thừa từ nhiều lớp khác

A
A B C
A A
B

B B C D C D
KẾ THỪA (INHERITANCE)
 C¸ch x©y dùng líp dÉn xuÊt : Gi¶ sö ®· ®Þnh
nghÜa líp A. §Ó x©y dùng líp B dÉn xuÊt tõ A, ta
viÕt như­sau:
class B : kieu_ke_thua A {
private:
// Khai bao thuoc tinh
public:
// Cac phuong thuc
} ;

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Có 3 kiểu kế thừa:

 class B: private A
 class B: protected A
 class B: public A
 Thành phần protected: là thành phần có thể được truy
xuất bởi các phương thức trong lớp dẫn xuất, nhưng
không thể truy xuất từ ngoài lớp đó.

www.themegallery.com
KẾ THỪA (INHERITANCE)

 Theo kiểu thừa kế public thì tất cả các thành


phần public và protected của lớp cơ sở cũng là
các thành phần public, protected của lớp dẫn
xuất.
 Theo kiểu thừa kế private thì tất cả các thành
phần public và protected của lớp cơ sở sẽ trở
thành các thành phần private của lớp dẫn xuất.
 Theo kiểu thừa kế protected thì tất cả các thành
phần public, protected của lớp cơ sở sẽ trở thành
protected của lớp dẫn xuất.

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Bảng tổng hợp các kiểu kế thừa
Kiểu kế thừa
private protected public
private private private private
Phạm vi

protected private protected protected


public private protected public

Phạm vi: Phạm vi truy xuất của các biến/thành phần trong
lớp cơ sở (cha)
Cột: Các kiểu kế thừa

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Ví dụ:

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Ví dụ:

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Ví dụ:

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Thừa kế các thành phần dữ liệu (thuộc tính)
 Tập thuộc tính của lớp dẫn xuất sẽ gồm: các
thuộc tính mới khai báo trong định nghĩa lớp dẫn
xuất và các thuộc tính của lớp cơ sở.
 Tuy vậy trong lớp dẫn xuất không cho phép truy
nhập đến các thuộc tính private của lớp cơ sở.
 Chú ý: Cho phép đặt trùng tên thuộc tính trong
các lớp cơ sở và lớp dẫn xuất.

www.themegallery.com
KẾ THỪA (INHERITANCE)
 Kế thừa phương thức:
Lớp dẫn xuất được thừa kế các phương thức public
của lớp cơ sở.
Trừ:
- Hàm tạo
- Hàm huỷ
- Toán tử gán

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
 Cách xây dựng hàm tạo của lớp dẫn xuất
 Hàm tạo cần có các đối số để khởi gán cho các
thuộc tính (thành phần dữ liệu) của lớp.
 Có thể phân thuộc tính làm 3 loại ứng với 3 cách
khởi gán khác nhau:
• Các thuộc tính mới khai báo trong lớp dẫn
xuất: Trong các phương thức của lớp dẫn xuất có
thể truy xuất đến các thuộc tính này. Vì vậy chúng
thường được khởi gán bằng các câu lệnh gán viết
trong thân hàm tạo.

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
• Các thành phần kiểu đối tượng: Trong lớp dẫn
xuất không cho phép truy nhập đến các thuộc tính
của các đối tượng này. Vì vậy để khởi gán cho các
đối tượng thành phần cần dùng hàm tạo của lớp
tương ứng.
• Các thuộc tính thừa kế từ các lớp cở sở: Trong
lớp dẫn xuất không được phép truy nhập đến các
thuộc tính này. Vì vậy để khởi gán cho các thuộc tính
nói trên, cần sử dụng hàm tạo của lớp cơ sở.

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
• Cách thức cũng giống như khởi gán cho các đối
tượng thành phần, chỉ khác nhau:
• Để khởi gán cho các đối tượng thành phần ta dùng tên đối
tượng thành phần
• Để khởi gán cho các thuộc tính thừa kế từ các lớp cơ sở ta
dùng tên lớp cơ sở:
 Tên_đối_tượng_thành_phần(danh sách giá
trị): Tên_lớp_cơ_sở(danh sách giá trị)

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
• Ví dụ:
#include <iostream>
class A {
protected:
int x;
public:
A()
{ x = 0;}
A(int x) {
this->x = x;
}
void xuatA() {
std::cout << "x = " << x << "\n";
}
};
www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
• Ví dụ:
class B: public A {
private:
int y;
public:
// su dung constructor cua lop A
B(int x, int y) : A(x){
this->y = y;
}
void xuatB() {
A::xuatA(); // su dung method cua lop A
std::cout << "y = " << y << "\n";
}
};

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa

• Ví dụ:
int main() {
A a;
B b(5, 10);
a.xuatA();
b.xuatB();
return 0;
}
 Kết quả:

www.themegallery.com
Hµm t¹o vµ hµm hñy ®èi víi tÝnh thõa kÕ
 Hµm huû
 Khi một đối tượng của lớp dẫn xuất được giải
phóng (bị huỷ), thì các đối tượng thành phần và
các đối tượng thừa kế từ các lớp cơ sở cũng bị
giải phóng theo. Do đó các hàm huỷ tương ứng
sẽ được gọi đến.
 Như vậy khi xây dựng hàm huỷ của lớp dẫn xuất,
chúng ta chỉ cần quan tâm đến các thuộc tính
(không phải là đối tượng) khai báo thêm trong
lớp dẫn xuất mà thôi. Ta không cần để ý đến các
đối tượng thành phần và các thuộc tính thừa kế
từ các lớp cơ sở.

www.themegallery.com
Bài tập
Bài 1:
Xây dựng lớp Nguoi gồm các thông tin: ID, tên và
các phương thức nhập thông tin.
Xây dựng lớp Sinhvien kế thừa lớp Nguoi và có thêm
thuộc tính diem, phương thức xuất dữ liệu.
Viết chương trình chính thực hiện nhập vào một
danh sách n sinh viên, sau đó hiển thị danh sách vừa
nhập.

www.themegallery.com
Bài tập
Bài 2:
Xây dựng lớp XE gồm các thông tin: Nhãn hiệu, Giá,
Năm sản xuất (yêu cầu các thông tin này chỉ có ở lớp XE
và các lớp dẫn xuất từ lớp XE được phép truy cập).
Xây dựng lớp OTO kế thừa từ lớp XE và có thêm các
thông tin: Số chỗ ngồi, trọng tải và các phương thức nhập
xuất dữ liệu.
Viết chương trình chính thực hiện:
-Nhập vào một danh sách n ô tô
- Hiển thị danh sách vừa nhập.
-Hiển thị danh sách các ô tô có trọng tải lớn hơn một giá
trị v được nhập từ bàn phím.

www.themegallery.com
Bài tập
Bài 3:
Hãy viết chương trình thực hiện các công việc sau:
- Xây dựng lớp cơ sở SanPham gồm:
+ Thuộc tính: tên sản phẩm, năm sản xuất, giá nhập
+ Phương thức: nhập, xuất thông tin sản phẩm
- Xây dựng lớp HoaDon bán sản phẩm kế thừa từ lớp SanPham có
thêm:
+ Thuộc tính: số lượng bán, giá bán
+ Phương thức: nhập, xuất thông tin, tính thành tiền (=số lượng
* giá bán), tính thuế (=10% thành tiền), tính lãi (=(giá bán - giá nhập) *
Số lượng).

www.themegallery.com
Bài tập
Bài 3: (tiếp)
- Trong chương trình chính:
+ Nhập danh sách n hóa đơn bán sản phẩm
+ Sắp xếp danh sách theo tiền lãi giảm dần.
+ In ra màn hình danh sách gồm: số thứ tự, tên sản phẩm, giá
thành, số lượng bán, giá bán, thành tiền, thuế và tiền lãi.
+ Tính tổng tiền của các hoá đơn bán sản phẩm.

www.themegallery.com

You might also like