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 đã
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)
......
tha
kế
tính
cht
riêng
Con = Cha + mt 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 chtừ 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 Lp cơs{
//...
};
class lp dn xut:kiu kếthaLp cơs{
//...
}
7OOP-CHƯƠNG 7-THỪA KẾ
DỤ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
dụ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ả vkiể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Ế
dụ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; //bli
}
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 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
dụ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Ế
dụ, có lớpdụ, 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Ế