
1
Chương 7:
THỪA KẾ
Giáo viên: Võ Hồng Bảo Châu
Khoa CNTT trường ĐH Lạc Hồng
LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
MỤC TIÊUMỤC TIÊU
•Sử dụng phương thức tự thực hiện trong các lớp dẫn xuất.
•Xây dựng các lớp mới thừa kế từ lớp đã có
•Lớp có các thành viên là lớp khác
2OOP-CHƯƠNG 7-THỪA KẾ
NỘI DUNG CHI TIẾTNỘI DUNG CHI TIẾT
•KHÁI NIỆM TÍNH THỪA KẾ
•LOẠI LỚP THỪA KẾ
– THỪA KẾ ĐƠN
– THỪA KẾ BỘI
•CÁC KIỂU THUỘC TÍNH KẾ THỪA
•PHƯƠNG THỨC THIẾT LẬP VÀ HỦY BỎ
3OOP-CHƯƠNG 7-THỪA KẾ
KHÁI NiỆM TÍNH THỪA KẾKHÁI NiỆM TÍNH THỪA KẾ
•Tạo ra lớp mới từ lớp đã có
•Sử dụng lại những kết quả đã có
•Tạo ra lớp thừa kế còn được gọi:
– Mở rộng (extend) lớp đã có,
– Hoặc đặc tả lại (specification)
•Lớp mới được tạo ra từ lớp đã có gọi là lớp thừa kế
(inheritance class) hay lớp dẫn xuất (derived class)
•Lớp để tạo ra lớp mới gọi là lớp cơ sở (based class) hay
lớp cha (super class)
4OOP-CHƯƠNG 7-THỪA KẾ

2
ID_Num
Name
YearOfBirth
Address
getID_Num()
setID_Num(newID)
......
class PERSON
RollNum
Score
getScore()
setSore(newScore)
......
class STUDENT
quan hệ
“là 1”
Đểđược cái
tương đương
ID_Num
Name
YearOfBirth
Address
getID_Num()
setID_Num(newID)
......
class STUDENT
RollNum
Score
getScore()
setSore(newScore)
......
thừa
kế
tính
chất
riêng
Con = Cha + một tí
LỚP CƠ
SỞ (LỚP
CHA)
LỚP
DẪN
XuẤT
(LỚP
CON)
5OOP-CHƯƠNG 7-THỪA KẾ
LOẠI LỚP THỪA KẾLOẠI LỚP THỪA KẾ
•Thừa kế đơn (single
inheritance): Tạo ra lớp dẫn
xuất chỉ từ một lớp cơ sở
•Thừa kế bội (multiple
inheritance): Lớp dẫn xuất
được tạo ra từ hơn 1 lớp cơ sở
A
B
A
B
C
A
B C
C
A B
6OOP-CHƯƠNG 7-THỪA KẾ
THỪA KẾ ĐƠNTHỪA KẾ ĐƠN
class Lớp cơsở{
//...
};
class lớp dẫn xuất:kiểu kếthừaLớp cơsở{
//...
}
7OOP-CHƯƠNG 7-THỪA KẾ
VÍ DỤVÍ DỤ
LỚP point
Dữ liệu: toại độ (x, y)
Hành vi:
Xuất tọa độ ra màn hình
LỚP coloredpoint
Dữ liệu: toại độ (x, y),màu
Hành vi:
Xuất tọa độ và màu ra màn hình
point
coloredpoint
8OOP-CHƯƠNG 7-THỪA KẾ

3
Ví dụVí dụ
class coloredpoint:public point{
unsigned int color;
public:
coloredpoint():point(){color=0;}
coloredpoint(float ox,float oy,unsigned int c):point(ox,oy){
color=c;
}
coloredpoint(coloredpoint &p):point(point &b){
color=b.color;
}
void display(){
cout<<“ham coloredpoint::display()\n”;
point:::display(); //gọi tới hàm cùng tên trong lớp cơ sở
cout<<“mau “<<color<<endl;
}
};
class point{
float x,y;
public:
point(float ox,float oy){x=ox;y=oy;}
point(point &p){x=p.x;y=p.y;}
void display(){
cout<<“Goi ham point::display()\n”;
cout<<“toa do :”<<x<<“;”<<y<<endl;
}
};
void main()
{
coloredpoint m;
m.display();
m.point::display();
coloredpoint n(2,3,6);
coloredpoint p=n;
p. display();
p.point::display();
}
Lớp dẫn xuất
(lớp con)
Kiểu thừa kế
Lớp cơ sở
(lớp cha)
Hành vi của
lớp cha
Hành vi của
lớp con
9OOP-CHƯƠNG 7-THỪA KẾ
LƯU ÝLƯU Ý
•Lớp dẫn xuất không thể truy cập đến phương thức thiết lập và
phương thức hủy bỏ của lớp cơ sở
•Hàm friend (hay lớp friend) của lớp cơ sở không thể là hàm
friend (hay lớp friend) của lớp dẫn xuất
•Các phép toán mới được cài đặt (như là sự định nghĩa chồng phép
toán) có thể được truy cập bình thường trong lớp dẫn xuất.
•Với những phép toán trả về kiểu của lớp cơ sở, không sử dụng
được trong lớp dẫn xuất. Điều này vẫn đúng cho cả những phương
thức trả về dữ liệu thuộc lớp cơ sở.
10 OOP-CHƯƠNG 7-THỪA KẾ
Ví dụVí dụ
class Double{
double data;
public:
Double( double = 0.0 );
Double operator+( Double );
};
11 OOP-CHƯƠNG 7-THỪA KẾ
class Sothuc:Double{
public:
//
};
main(){
Sothuc a, b(10), c;
c = a + b; //bịlỗi
}
12 OOP-CHƯƠNG 7-THỪA KẾ

4
CÁC KIỂU THUỘC TÍNH KẾ THỪACÁC KIỂU THUỘC TÍNH KẾ THỪA
•PRIVATE
•PUBLIC
Kiểu kế thừa
Kiểu truy cập
các TP ở lớp cơ sở
Public Private
Public Public private
Private x x
protected protected private
Kiểu thuộc
tính trong
lớp dẫn
xuất
13 OOP-CHƯƠNG 7-THỪA KẾ
PHƯƠNG THỨC THIẾT LẬPPHƯƠNG THỨC THIẾT LẬP
•Phương thức thiết lập của lớp cơ sở thực hiện trước phương thức
thiết lập của lớp dẫn xuất
•Đối với thừa kế bội, phương thức thiết lập của lớp cơ sở xuất hiện
trước được thực hiện trước
14 OOP-CHƯƠNG 7-THỪA KẾ
PHƯƠNG THỨC HỦY BỎPHƯƠNG THỨC HỦY BỎ
•Phương thức hủy bỏ của lớp cơ sở thực hiện sau phương thức hủy
bỏ của lớp dẫn xuất.
•Đối với thừa kế bội, phương thức hủy bỏ của lớp xuất hiện trước
được thực hiện sau.
15 OOP-CHƯƠNG 7-THỪA KẾ
Hàm xây dựng và hàm hủyHàm xây dựng và hàm hủy
•Trong thừa kế, khi khởi tạo đối tượng:
– Hàm xây dựng của lớp cha sẽ được gọi trước
– Sau đó mới là hàm xây dựng của lớp con.
•Trong thừa kế, khi hủy bỏ đối tượng:
– Hàm hủy của lớp con sẽ được gọi trước
– Sau đó mới là hàm hủy của lớp cha.
AA
BB
CC
16 OOP-CHƯƠNG 7-THỪA KẾ

5
Ví dụVí dụ
class ONE{
public:
ONE(){cout << “First class\n”;}
~ONE(){cout << “Destructor of first class\n”;}
};
class TWO_A:ONE{
public:
TWO_A(){cout << “Second class A\n”;}
~TWO_A(){cout << “Destructor of second A\n”;}
};
class TWO_B:ONE{
public:
TWO_B(){cout << “Second class B\n”;}
~TWO_B(){cout << “Destructor of second B\n”;}
};
17 OOP-CHƯƠNG 7-THỪA KẾ
class THREE:TWO_A,TWO_B{
THREE(){cout << “Third class\n”;}
~THREE(){cout << “Destructor of third class\n”;}
};
main(){
THREE obj;
}
First class
Second class A
Second class B
Third class
Destructor of third class
Destructor of second B class
Destructor of second A class
Destructor of first class
18 OOP-CHƯƠNG 7-THỪA KẾ
Trường hợp chỉ định constructorTrường hợp chỉ định constructor
•Trong một lớp có thể có nhiều phương thức thiết lập.
•Có thể chỉ định phương thức thiết lập của lớp cơ sở bằng cách
dùng phép toán : ngay sau phương thức thiết lập của lớp dẫn xuất.
•Hoặc muốn chỉ định một tham số thực cho phương thức thiết lập
của lớp cơ sở
19 OOP-CHƯƠNG 7-THỪA KẾ
Ví dụ, có lớpVí dụ, có lớp
class Date {
int d, m, y;
public:
Date(int=1,int=1,int=2008);
Date(const string);
};
Date newYear(7,2,2008);
Date christmas(“25 December“);
20 OOP-CHƯƠNG 7-THỪA KẾ

