KếKế
thừathừa
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
KếKế
thừathừa
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
KháiKhái niệmniệm kếkế thừathừa
TầmTầm vựcvực trongtrong kếkế thừathừa
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
QuanQuan hệhệ ISIS A A vàvà HASHAS A.A.
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
KháiKhái niệmniệm kếkế thừathừa
TầmTầm vựcvực trongtrong kếkế thừathừa
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
QuanQuan hệhệ ISIS A A vàvà HASHAS A.A.
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm kếkế thừathừa
VấnVấn đềđề trùngtrùng lấplấp thôngthông tin:tin:
XétXét nhiềunhiều lớplớp cócó thôngthông tin tin trùngtrùng nhaunhau
CóCó 2 2 dạngdạng::
DạngDạng chiachia sẻsẻ: A ∩ B ≠ Ø.: A ∩ B ≠ Ø.
DạngDạng mởmở rộngrộng: B = A + : B = A + εε
NhượcNhược
điểmđiểm
::
A
x, y, z
a, b, c
u, v, w
B
x, y, z
a, b, c
O
x, y, z
A
x, y, z
KháiKhái niệmniệm kếkế thừathừa
KhaiKhai báobáo trongtrong C++:C++:
class <class <LớpLớp kếkế thừathừa> : <> : <LoạiLoại kếkế thừathừa> <> <LớpLớp cơcơ sởsở>>
LoạiLoại kếkế thừathừa::
public, private, protected.public, private, protected.
VíVí
dụdụ
::
VíVí
dụdụ
::
class class AA : public : public OO
{{
private:private:
// // KhaiKhai báobáo thuộcthuộc tínhtính mớimới củacủa A.A.
public:public:
// // KhaiKhai báobáo phươngphương thứcthức mớimới củacủa A.A.
};};
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
VíVí dụdụ::
class class GiaoVienGiaoVien
{{
private:private:
charchar **m_hoTenm_hoTen;;
floatfloat m_mucLuongm_mucLuong;;
intint m_ngayNghim_ngayNghi;;
public:public:
class class GVCNGVCN : public : public GiaoVienGiaoVien
{{
private:private:
charchar **m_lopCNm_lopCN;;
public:public:
GVCN(char *GVCN(char *hoTenhoTen,,
float float
mucLuongmucLuong
,,
Lớp kế thừa Lớp cơ sở
public:public:
GiaoVienGiaoVien(char *(char *hoTenhoTen,,
float float mucLuongmucLuong,,
intint ngayNghingayNghi););
void void giangDaygiangDay();();
float float tinhLuongtinhLuong();();
};};
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
float float
mucLuongmucLuong
,,
intint ngayNghingayNghi,,
TầmTầm vựcvực trongtrong kếkế thừathừa
XétXét lớplớp A A kếkế thừathừa lớplớp O:O:
A A kếkế thừathừa toàntoàn bộbộ thuộcthuộc tínhtính vàvà phươngphương thứcthức củacủa O.O.
TầmTầm vựcvực củacủa nhữngnhững thànhthành phầnphần nàynày thếthế nàonào??
Lớp A Lớp B
Do Do loạiloại kếkế thừathừa quyếtquyết địnhđịnh!!!!
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
private:
m_iX
protected:
m_iY
public:
m_iZ
???:
m_iX
???:
m_iY
???:
m_iZ
Kế thừa
TầmTầm vựcvực trongtrong kếkế thừathừa
BảngBảng tầmtầm vựcvực trongtrong kếkế thừathừa::
TầmTầm vựcvực
Kế thừa Kế thừa
publicpublic
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức đãđã kếkế thừathừa
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
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!!
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
VíVí dụdụ::
GVCN GVCN kếkế thừathừa từtừ GiaoVienGiaoVien
GVCN GVCN tínhtính lươnglương kháckhác GiaoVienGiaoVien
LươngLương GV = GV = MứcMức lươnglương –– SốSố ngàyngày nghỉnghỉ * 10000.* 10000.
LươngLương GVCN = GVCN = LươngLương GV + GV + PhụPhụ cấpcấp 100000.100000.
ViếtViết
lạilại
phươngphương
thứcthức
tinhLuongtinhLuong
() ()
chocho
lớplớp
GVCN.GVCN.
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
VíVí dụdụ::
class class GVCNGVCN : public : public GiaoVienGiaoVien
{{
private:private:
charchar **m_lopCNm_lopCN;;
public:public:
GVCN(char *GVCN(char *hoTenhoTen,,
float float
mucLuongmucLuong
,,
void void mainmain()()
{{
GiaoVienGiaoVien gv1(“Minh”, 500000, 5gv1(“Minh”, 500000, 5););
gv1.giangDay();gv1.giangDay();
float luong1 float luong1 = gv1.tinhLuong= gv1.tinhLuong();();
GVCN GVCN
gv2(“gv2(“
HanhHanh
”, 700000, 3”, 700000, 3
););
float float
mucLuongmucLuong
,,
intint ngayNghingayNghi,,
char *char *lopCNlopCN););
void void sinhHoatCNsinhHoatCN();();
float float tinhLuongtinhLuong()()
{{
return return GiaoVienGiaoVien::::TinhLuongTinhLuong() + 100000;() + 100000;
LớpLớp A A quanquan hệhệ HASHAS A A vớivới lớplớp BB
A A baobao hàmhàm B.B.
A A chứachứa B.B.
B B làlà mộtmột bộbộ phậnphận củacủa A.A.
VíVí
dụdụ
::
VíVí
dụdụ
::
ChiecXeChiecXe chứachứa BanhXeBanhXe
QuyenSachQuyenSach chứachứa TrangSachTrangSach
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
QuanQuan hệhệ ISIS A A vàvà HASHAS AA
Dr. Guru Dr. Guru khuyênkhuyên: : luậtluật xâyxây dựngdựng lớplớp
A A cócó quanquan hệhệ ISIS A A vớivới B.B.
Cho A Cho A kếkế thừathừa B.B.
A A cócó quanquan hệhệ HASHAS A A vớivới B.B.
Cho B Cho B làlà mộtmột thuộcthuộc tínhtính củacủa A.A.
tùytùy
theotheo
loạiloại
kếkế
thừathừa
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức::
““CảiCải biênbiên” ” nhữngnhững phươngphương thứcthức kếkế thừathừa
QuanQuan hệhệ ISIS A A vàvà HASHAS A:A:
ISIS A: A A: A làlà trườngtrường hợphợp đặcđặc biệtbiệt củacủa B.B.
HASHAS A: A A: A baobao hàmhàm B.B.
22Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 7.17.1::
NhữngNhững cặpcặp đốiđối tượngtượng sausau cócó quanquan hệhệ ISIS A hay HASA hay HAS A?A?
KhaiKhai báobáo lớplớp chocho từngtừng cặpcặp thểthể hiệnhiện quanquan hệhệ giữagiữa chúngchúng
HìnhHình vuôngvuông / / HìnhHình chữchữ nhậtnhật
ĐaĐa giácgiác / / CạnhCạnh
GiámGiám
đốcđốc
/ /
NhânNhân
viênviênGiámGiám
đốcđốc
BàiBài tậptập
BàiBài tậptập 7.2:7.2:
DựaDựa trêntrên lớplớp TaiKhoanTaiKhoan, , xâyxây dựngdựng lớplớp TaiKhoanTietKiemTaiKhoanTietKiem nhưnhư sausau::
CóCó thêmthêm thôngthông tin:tin:
KỳKỳ hạnhạn gửigửi
LãiLãi suấtsuất
SốSố thángtháng đãđã gửigửi
KhiKhi nạpnạp tiềntiền, , sốsố thángtháng đãđã gửigửi đượcđược tínhtính lạilại từtừ đầuđầu
ChỉChỉ đượcđược rútrút tiềntiền khikhi đếnđến kỳkỳ hạnhạn
Cho Cho phépphép tăngtăng sốsố thángtháng đãđã gửigửi
TínhTính sốsố dưdư tạitại thờithời điểmđiểm hiệnhiện tạitại
25Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy