You are on page 1of 47

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC,

TP. HỒ CHÍ MINH


1
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Nội dung

1 Quan hệ giữa các lớp đối tượng

2 Kế thừa

3 Kế thừa đơn

4 Phạm vi truy xuất trong kế thừa

5 Đa kế thừa

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
2
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
2
Quan hệ giữa các lớp đối tượng

❖ Các lớp đối tượng có những loại quan hệ:


▪ Quan hệ một - một (1-1)
▪ Quan hệ một - nhiều (1-n)
▪ Quan hệ nhiều - nhiều (n-n)
▪ Quan hệ đặc biệt hóa - tổng quát hóa

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
3
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
3
Quan hệ một một (1-1)

❖Khái niệm: Hai lớp đối tượng được gọi là có quan hệ


một-một với nhau khi một đối tượng thuộc lớp này
quan hệ duy nhất với một đối tượng thuộc lớp kia và
ngược lại.
❖Ký hiệu:
Quan hệ (1-1)
ClassA ClassB

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
4
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
4
Quan hệ một một (1-1)

❖Ví dụ:
Chủ nhiệm
LOPHOC GIAOVIEN

Hôn nhân
VO CHONG

Có (!)
COUNTRY CAPITAL

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
5
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
5
Quan hệ một nhiều (1-n)
❖Khái niệm: Hai lớp đối tượng được gọi là có quan hệ
một-nhiều với nhau khi:
❖ Một đối tượng thuộc lớp này quan hệ với nhiều đối tượng
thuộc lớp kia
❖và một đối tượng lớp kia có quan hệ duy nhất với một đối
tượng thuộc lớp này.
❖Kí hiệu: Quan hệ
(1-n)
ClassA ClassB
(1-1)

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
6
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
6
Quan hệ một nhiều (1-n)

❖Ví dụ:

LOPHOC HOCSINH


CONGTY NHANVIEN

Sáng tác
HOASI TACPHAM

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
7
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
7
Quan hệ nhiều nhiều (n-n)
❖ Khái niệm: hai lớp đối tượng được gọi là quan hệ nhiều-
nhiều với nhau khi:
❖ Một đối tượng thuộc lớp này có quan hệ với nhiều đối tượng
thuộc lớp kia,
❖ và một đối tượng lớp kia cũng có quan hệ với nhiều đối tượng
thuộc lớp này.
❖ Kí hiệu:
Quan hệ
(1-n)
ClassA ClassB
(n-1)

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
8
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
8
Quan hệ nhiều nhiều (n-n)

❖Ví dụ

Yêu/Thích
NAM NU

Thăm Khám
BACSI bệnh
BENHNHAN

? ?

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
9
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
9
Quan hệ đặc biệt hóa – tổng quát hóa
❖ Khái niệm: hai lớp đối tượng được gọi là có quan hệ đặc
biệt hóa-tổng quát hóa với nhau khi:
❖ Lớp đối tượng này là trường hợp đặc biệt của lớp đối tượng kia,
❖ và lớp đối tượng kia là trường hợp tổng quát của lớp đối tượng
này.

❖ Kí kiệu:
ClassA
A là TH tổng quát của B B là TH đặc biệt của A

ClassB
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
10
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
10
Quan hệ đặc biệt hóa – tổng quát hóa

❖Ví dụ:

TAMGIAC NGUOI

TAMGIACCAN SINHVIEN

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
11
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
11
Quan hệ đặc biệt hóa – tổng quát hóa

Polygon

Rectangle Triangle

Animal

TerrestrialAnimal AquaticAnimal

Cat Horse Chicken Fish Octopus

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
12
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
12
Kế thừa
❖Kế thừa là một đặc điểm của OOP dùng để biểu diễn
mối quan hệ đặc biệt hóa – tổng quát hóa giữa các
lớp. Các lớp được trừu tượng hóa và được tổ chức
thành một sơ đồ phân cấp lớp.
❖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.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
13
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
13
Kế thừa
❖ Các lớp với các đặc điểm tương tự nhau có thể được tổ
chức thành một sơ đồ phân cấp kế thừa (cây kế thừa):
Lớp ở trên cùng là trừu tượng hóa của toàn bộ các lớp ở
bên dưới nó.
❖ Quan hệ “là 1”: Kế thừa được sử dụng thông dụng nhất
để biểu diễn quan hệ “là 1”.
▪ Một sinh viên là một người
▪ Một hình tròn là một hình ellipse
▪ Một tam giác là một đa giác
▪ …

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
14
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
14
Lợi ích kế thừa

❖Kế thừa cho phép xây dựng lớp mới từ lớp đã có (tái
sử dụng).
❖Kế thừa cho phép tổ chức các lớp chia sẻ mã chương
trình chung, nhờ vậy có thể dễ dàng sửa chữa, nâng
cấp hệ thống.
❖Trong C++, kế thừa còn định nghĩa sự tương thích,
nhờ đó ta có cơ chế chuyển kiểu tự động.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
15
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
15
Lợi ích kế thừa

❖ Trong lớp kế thừa, 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ố}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
16
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
16
Lợi ích kế thừa
❖Ví dụ: Yêu cầu xây dựng 3 lớp
▪ Lớp NGƯỜI
NGƯỜI
Dl: ht, ns, gt
Pt: nhap(), in()
▪ Lớp SV ▪ Lớp GV
SV GV
Dl: ht, ns, gt Dl: ht, ns, gt
Pt: nhap(), in(), Pt: nhap(), in(),
xeploai() tangluong()
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
17
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
17
Đặc tính Kế thừa

❖ Cho phép định nghĩa lớp


mới từ lớp đã có:
▪ Lớp đã có gọi là lớp cha
(superclass) hay lớp cơ sở
(base class).
▪ Lớp mới gọi là lớp con
(subclass) hay lớp dẫn xuất
(derived class)

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
18
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
18
Đặc tính Kế thừa
❖ Thừa kế cho phép:
▪ Nhiều lớp có thể dẫn xuất từ một lớp cơ sở.
▪ Một lớp có thể là dẫn xuất của nhiều lớp cơ sở.
❖ Thừa kế không chỉ giới hạn ở một mức: Một lớp dẫn xuất
có thể là lớp cơ sở cho các lớp dẫn xuất khác.
Animal Lớp cơ sở

Lớp dẫn xuất


TerrestrialAnimal AquaticAnimal
Lớp cơ sở

Lớp dẫn xuất


Cat Horse Chicken Fish Octopus

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
19
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
19
Các loại kế thừa
Kế thừa đơn: chỉ có một lớp cơ sở PS1

PS2

Đa kế thừa: có nhiều hơn một lớp cơ sở

A B

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
20
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
20
Cú pháp khai báo kế thừa

class SuperClass
{
//Thành phần của lớp cơ sở, lớp cha
};
class DerivedClass : public/protected/private SusperClass
{
//Thành phần bổ sung của lớp dẫn xuất, lớp con
};

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
21
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
21
Cú pháp khai báo kế thừa
Cú pháp:

class <tên lớp con> : [kiểu Kế thừa]<tên lớp cha1>


, [kiểu Kế thừa]<tên lớp cha 2>
…..
{
// Các thành phần của lớp con
};

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
22
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
22
Cú pháp khai báo kế thừa

Trong đó: public


▪ Kiểu dẫn xuất có thể là: protected
private (ngầm định)

▪public: tất cả các thành phần public của lớp cha sẽ là


pubic ở lớp con
▪private: tất cả các thành phần public của lớp cha sẽ là
private ở lớp con
▪……

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
23
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
23
Truy cập thành viên của lớp

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
24
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
24
Kế thừa đơn

❖Xét hai khái niệm Người và Sinh viên với mối quan hệ
tự nhiên: Một Sinh viên là một Người. Trong C++, ta
có thể biểu diễn khái niệm trên, một sinh viên là một
người có thêm một số thông tin và một số thao tác
(riêng biệt của sinh viên).

❖Như vậy, ta tổ chức lớp Sinh viên kế thừa từ lớp


Người.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
25
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
25
Kế thừa đơn

❖Ta có thể tổ chức hai lớp Nam sinh và Nữ sinh là hai


lớp con (lớp dẫn xuất) của lớp Sinh viên. Trường hợp
này, lớp Sinh viên trở thành lớp cha (lớp cơ sở) của
hai lớp trên. NGƯỜI

GIẢNG VIÊN SINH VIÊN

NAM SINH NỮ SINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
26
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
26
Kế thừa đơn – Ví dụ
class Nguoi {
char *HoTen;
int NamSinh;
public:
Nguoi();
Nguoi( char *ht, int ns):NamSinh(ns) {HoTen=strdup(ht);}
~Nguoi() {delete [ ] HoTen;}
void An() const { cout<<HoTen<<" an 3 chen com \n"; }
void Ngu() const { cout<<HoTen<< " ngu ngay 8 tieng \n"; }
void Xuat() const;
friend ostream& operator << (ostream &os, Nguoi& p);
};
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
27
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
27
Kế thừa đơn – Ví dụ
class SinhVien : public Nguoi {
char *MaSo;
public:
SinhVien();
SinhVien( char *ht, char *ms, int ns) : Nguoi(ht,ns) {
MaSo = strdup(ms);
}
~SinhVien() {
delete [ ] MaSo;
}
void Xuat() const;
};
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
28
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
28
Kế thừa đơn – Ví dụ
void Nguoi::Xuat() const {
cout << "Nguoi, ho ten: " << HoTen;
cout << " nam sinh " << NamSinh;
cout << endl;
}
void SinhVien::Xuat() const {
cout << "Sinh vien, ma so: " << MaSo;
//cout << ", ho ten: " << HoTen;
//cout << ", nam sinh: " << NamSinh;
cout << endl;
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
29
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
29
Kế thừa đơn – Ví dụ
void main() {
Nguoi p1("Le Van Nhan",1980);
SinhVien s1("Vo Vien Sinh", "200002541",1984);
cout << "1.\n";
p1.An(); s1.An();
cout << "2.\n";
p1.Xuat(); s1.Xuat();
s1.Nguoi::Xuat();
cout << "3.\n";
cout << p1 << "\n";
cout << s1 << "\n";
} TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
30
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
30
Kế thừa đặc tính của lớp cha
❖ Khai báo:
class SinhVien : public Nguoi {
//...
};
▪ Khi đó Sinh viên thừa hưởng các đặc tính của lớp Người.
❖ Về mặt dữ liệu: Mỗi đối tượng Sinh viên tự động có thành
phần dữ liệu họ tên, năm sinh của Người.
❖ Về mặt thao tác: Lớp Sinh viên được tự động kế thừa các
thao tác của lớp cha – Người. Đây chính là khả năng sử
dụng lại mã chương trình.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
31
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
31
Kế thừa đặc tính của lớp cha

❖Riêng phương thức thiết lập không được kế thừa.


❖Khả năng thừa hưởng các thao tác của lớp cơ sở có
thể được truyền qua “vô hạn mức”.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
32
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
32
Định nghĩa lại thao tác ở lớp con
❖Ta có thể định nghĩa lại các đặc tính ở lớp con đã có ở
lớp cha, việc định nghĩa lại chủ yếu là thao tác.
class SinhVien : public Nguoi {
char *MaSo;
public:
//...
void Xuat() const;
};
void SinhVien::Xuat() const {
cout << "Sinh vien, ma so: " << MaSo << ", ho ten: " << HoTen;
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
33
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
33
Ràng buộc ngữ nghĩa ở lớp con

❖Có thể áp dụng quan hệ kế thừa mang ý nghĩa ràng


buộc, đối tượng ở lớp con là đối tượng ở lớp cha
nhưng có dữ liệu bị ràng buộc:
▪ Hình tròn là một hình Ellipse với ràng buộc bán kính ngang
dọc bằng nhau.
▪ Số ảo là số phức với ràng buộc phần thực bằng 0
▪ …

❖Lớp số ảo sau đây là một ví dụ minh họa.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
34
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
34
Ví dụ
class Complex {
friend ostream& operator <<(ostream&, Complex);
friend class Imag;
double re, im;
public:
Complex( double r = 0, double i = 0):re(r), im(i){ }
Complex operator +(Complex b);
Complex operator -(Complex b);
Complex operator *(Complex b);
Complex operator /(Complex b);
double Norm() const { return sqrt(re*re + im*im);}
}; TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
35
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
35
Ví dụ
class Imag: public Complex {
public:
Imag(double i = 0):Complex(0, i){ }
Imag(const Complex &c) : Complex(0, c.im){ }
Imag& operator = (const Complex &c){
re = 0; im = c.im;
return *this;
}
double Norm() const {
return fabs(im);
}
}; TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH 36
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
36
Ví dụ
void main() {
Imag i = 1;
Complex z1(1,1);
Complex z3 = z1 - i; //z3 = (1,0)
i = Complex(5,2); operator = (c)

Imag j = z1;
cout << "z1 = " << z1 << "\n"; // z1 = (1,1)
cout << "i = " << i << "\n"; // i la so ao (0,2)
cout << "j = " << j << "\n"; // j la so ao (0,1)
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
37
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
37
Ràng buộc ngữ nghĩa ở lớp con
❖Trong ví dụ trên, lớp số ảo (Imag) kế thừa hầu hết các
thao tác của lớp số phức (Complex).
❖Tuy nhiên, ta muốn ràng buộc mọi đối tượng thuộc lớp
số ảo đều phải có phần thực bằng 0. Vì vậy, phải định
nghĩa lại các hàm thành phần có thể vi phạm điều này.
❖Ví dụ phép toán gán phải được định nghĩa lại để đảm
bảo ràng buộc này.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
38
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
38
Ví dụ kế thừa

◼ Thông tin: ◼ Thông tin:


❑ Họ tên. ❑ Họ tên.
❑ Mức lương. ❑ Mức lương.
❑ Số ngày nghỉ. ❑ Số ngày nghỉ.
◼ Công việc: ❑ Lớp chủ nhiệm.
❑ Giảng dạy. ◼ Công việc: GVCN
Giáo viên ❑ Tính lương. ❑ Giảng dạy.
❑ Tính lương.
❑ Sinh hoạt chủ nhiệm.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 39 39
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Ví dụ kế thừa
class GiaoVien { Lớp kế thừa Lớp cơ sở

private:
class GVCN : public GiaoVien {
char *m_sHoTen; private:
float m_fMucLuong; char *m_sLopCN;
int m_iSoNgayNghi; public:
GVCN(char *sHoTen,
public:
float fMucLuong,
GiaoVien(char *sHoTen, int iSoNgayNghi,
float fMucLuong, char *sLopCN);
void sinhHoatCN();
int iSoNgayNghi);
};
void giangDay();
float tinhLuong(); GVCN thừa hưởng TẤT CẢ thuộc tính và
}; phương thức của GiaoVien

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 40 40
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Ví dụ kế thừa
void main() {
GiaoVien gv1(“Minh”, 500000, 5);
gv1.giangDay();
float fLuong1 = gv1.tinhLuong();

GVCN gv2(“Hanh”, 700000, 3);


gv2.giangDay();
gv2.sinhHoatCN();
float fLuong2 = gv2.tinhLuong();
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 41 41
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Định nghĩa lại phương thức

• Kế thừa một phần:


• Không kế thừa “máy móc” tất cả.
• Lớp kế thừa có thể thay đổi những gì đã kế thừa!!
➔ Định nghĩa lại phương thức đã kế thừa.

Lớp kế thừa thừa hưởng TẤT CẢ thuộc tính và


phương thức của lớp cơ sở TRỪ những phương thức
được định nghĩa lại!!

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 42 42
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Định nghĩa lại phương thức (tt)

• Trong lớp dẫn xuất ta có thể định nghĩa lại


phương thức đã định nghĩa ở lớp cơ sở. Khi đó ta
phải truy xuất như sau:
s1.Nguoi::Xuat();

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 43 43
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Định nghĩa lại phương thức

❖Ví dụ:
• GVCN kế thừa từ GiaoVien.
• GVCN tính lương khác GiaoVien.
–Lương GV = Mức lương – Số ngày nghỉ * 10000.
–Lương GVCN = Lương GV + Phụ cấp 50000.

➔ Viết lại phương thức tinhLuong() cho lớp GVCN.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 44 44
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Định nghĩa lại phương thức
class GiaoVien {
private:
char *m_sHoTen;
float m_fMucLuong;
int m_iSoNgayNghi;
public:
GiaoVien(char *sHoTen, float fMucLuong, int iSoNgayNghi);
void giangDay();
float tinhLuong() {
return m_fMucLuong – m_iSoNgayNghi * 10000;
}
};

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 45 45
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Định nghĩa lại phương thức
void main() {
GiaoVien gv1(“Minh”, 500000, 5);
gv1.giangDay();
class GVCN : public GiaoVien {
private: float fLuong1 = gv1.tinhLuong();
char *m_sLopCN;
public: GVCN gv2(“Hanh”, 700000, 3);
GVCN(char *sHoTen, gv2.giangDay();
float fMucLuong, float fLuong2 = gv2.tinhLuong();}
int iSoNgayNghi,
char *sLopCN);
void sinhHoatCN();
float tinhLuong() {
return GiaoVien::TinhLuong() + 50000;
}
};
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
Ths. Mai Xuân Hùng Chương 5 – Kế thừa 46 46
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Q&A

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
47
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn

You might also like