Tải bản đầy đủ (.pdf) (26 trang)

Lập trình hướng đối tượng tren C/C++ - OOP 07 inheritance

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (691.06 KB, 26 trang )

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


B
x, y, z
u, v, w

NhượcNhược
điểmđiểm
::
 XâyXây dựngdựng tốntốn kémkém
 Dung Dung lượnglượng lưulưu trữtrữ lớnlớn
 ThayThay đổiđổi phầnphần chungchung khókhó khănkhăn
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
A
x, y, z
B
x, y, z
a, b, c
Giải quyết: tái sử dụng!!
KháiKhái niệmniệm kếkế thừathừa
 KháiKhái niệmniệm kếkế thừathừa::

ĐịnhĐịnh nghĩanghĩa lớplớp mớimới dựadựa trêntrên nhữngnhững lớplớp đãđã cócó
 LớpLớp cơcơ sởsở:: lớplớp dùngdùng đểđể địnhđịnh nghĩanghĩa lớplớp mớimới
 LớpLớp kếkế thừathừa:: lớplớp đượcđược địnhđịnh nghĩanghĩa từtừ lớplớp đãđã cócó
 LớpLớp kếkế thừathừa thừathừa hưởnghưởng TẤT CẢTẤT CẢ từtừ lớplớp cơcơ sởsở
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
A
x, y, z
a, b, c
B
x, y, z

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

KháiKhái niệmniệm kếkế thừathừa
 VíVí dụdụ::
 ThôngThông tin:tin:
 HọHọ têntên

MứcMức
lươnglương

 Thông tin:Thông tin:
 Họ tên.Họ tên.

Mức lương.Mức lương.
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MứcMức
lươnglương

 SốSố ngàyngày nghỉnghỉ
 CôngCông việcviệc::
 GiảngGiảng dạydạy
 TínhTính lươnglương
Mức lương.Mức lương.
 Số ngày nghỉ.Số ngày nghỉ.
 Lớp chủ nhiệm.Lớp chủ nhiệm.
 Công việc:Công việc:
 Giảng dạy.Giảng dạy.
 Tính lương.Tính lương.
 Sinh hoạt chủ nhiệm.Sinh hoạt chủ nhiệm.
Giáo viênGiáo viên
GVCNGVCN
KháiKhái niệmniệm kếkế thừathừa

 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,,

char *char *lopCNlopCN););
void void sinhHoatCNsinhHoatCN();();
};};
GVCN thừa hưởng TẤT CẢ
thuộc tính và phương thức
của GiaoVien
KháiKhái niệmniệm kếkế thừathừa
 VíVí dụdụ::
void main()void main()
{{
GiaoVienGiaoVien gv1(“Minh”, 500000, 5);gv1(“Minh”, 500000, 5);
gv1.giangDay();gv1.giangDay();
float luong1 = gv1.tinhLuong();float luong1 = gv1.tinhLuong();
GVCN gv2(“GVCN gv2(“
HanhHanh
”, 700000, 3);”, 700000, 3);
GVCN gv2(“GVCN gv2(“
HanhHanh
”, 700000, 3);”, 700000, 3);
gv2.giangDay();gv2.giangDay();
gv2.sinhHoatCN();gv2.sinhHoatCN();
float luong2 = float luong2 = gv2.tinhLuong();gv2.tinhLuong();
}}
9Phươ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.
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy

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

Kế thừa Kế thừa
protectedprotected
Kế thừa Kế thừa
privateprivate
publicpublic publicpublic protectedprotected privateprivate
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
protectedprotected protectedprotected protectedprotected privateprivate
privateprivate
KhôngKhông thểthể
truytruy xuấtxuất
Không thể Không thể
truy xuấttruy xuất
KhôngKhông thểthể
truytruy xuấtxuất
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.
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
 KếKế thừathừa mộtmột phầnphần::

CóCó thểthể thaythay đổiđổi nhữngnhững phầnphần đãđã kếkế thừathừa????
 KhôngKhông kếkế thừathừa ““máymáy mócmóc” ” tấttất cảcả
 LớpLớp kếkế thừathừa cócó thểthể thaythay đổiđổi nhữngnhững gìgì đãđã kếkế thừathừa!!!!





 Đị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.






ViếtViết
lạilại
phươngphương
thứcthức
tinhLuongtinhLuong
() ()
chocho
lớplớp
GVCN.GVCN.
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ĐịnhĐịnh nghĩanghĩa lạilại phươngphương thứcthức
 VíVí dụdụ::
class class GiaoVienGiaoVien
{{
private:private:
charchar **m_hoTenm_hoTen;;
floatfloat m_mucLuongm_mucLuong;;
intint m_ngayNghim_ngayNghi;;
public:public:
public:public:
GiaoVienGiaoVien(char *(char *hoTenhoTen, float , float mucLuongmucLuong, , intint ngayNghingayNghi););
void void giangDaygiangDay();();
float float tinhLuongtinhLuong()()
{{
return return m_mucLuongm_mucLuong –– m_ngayNghim_ngayNghi * 10000;* 10000;
}}
};};
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy

Đị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;

}}
};};
17Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
GVCN GVCN
gv2(“gv2(“
HanhHanh
”, 700000, 3”, 700000, 3
););
gv2.giangDay();gv2.giangDay();
float luong2 float luong2 = = gv2.tinhLuonggv2.tinhLuong();();
}}
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.
18Phươ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
 QuanQuan hệhệ ISIS A:A:

LớpLớp A A quanquan hệhệ ISIS A A vớivới lớplớp BB
 A A làlà mộtmột trườngtrường hợphợp đặcđặc biệtbiệt củacủa B.B.
 A A cùngcùng loạiloại vớivới B.B.
 VíVí dụdụ::
 GVCN GVCN làlà mộtmột GiaoVienGiaoVien đặcđặc biệtbiệt
 HinhVuongHinhVuong làlà mộtmột HinhChuNhatHinhChuNhat đặcđặc biệtbiệt
 ConMeoConMeo làlà mộtmột ConVatConVat đặcđặc biệtbiệt
19Phươ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
 QuanQuan hệhệ HASHAS A:A:


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.

 VíVí dụdụ::
class class ConMeoConMeo : public : public ConVatConVat { };{ };
class class ChiecXeChiecXe
{{
private:private:
BanhXeBanhXe **m_banhXem_banhXe;;
};};
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TómTóm tắttắt
 KháiKhái niệmniệm kếkế thừathừa::

ĐịnhĐịnh nghĩanghĩa lớplớp mớimới dựadựa trêntrên nhữngnhững lớplớp đãđã cócó
 LớpLớp kếkế thừathừa thừathừa hưởnghưởng TẤT CẢ TẤT CẢ từtừ lớplớp cơcơ sởsở
 TầmTầm vựcvực trongtrong kếkế thừathừa::

TầmTầm
vựcvực
thaythay
đổiđổi
tùytùy
theotheo
loạiloại
kếkế
thừathừa


TầmTầm
vựcvực
thaythay
đổiđổi

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ên


GiámGiám
đốcđốc

/ /
NhânNhân
viênviên

HìnhHình tròntròn / / HìnhHình Ellipse.Ellipse.
MáyMáy bay / bay / ĐộngĐộng cơcơ
CâuCâu / / TừTừ
MỹMỹ phẩmphẩm / / HàngHàng hóahóa
CâyCây lúalúa / / CâyCây lươnglương thựcthực
ThưThư việnviện / / SáchSách
PhimPhim hoạthoạt hìnhhình / / PhimPhim ảnhảnh
23Phươ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.2:7.2:
Cho Cho lớplớp TaiKhoanTaiKhoan nhưnhư sausau::
class class TaiKhoanTaiKhoan
{{
private:private:
floatfloat m_soDum_soDu = 0;= 0;
public:public:
public:public:
float float baoSoDubaoSoDu() { return () { return m_soDum_soDu; }; }
void void napTiennapTien(float (float soTiensoTien) { ) { m_soDum_soDu += += soTiensoTien; }; }
void void rutTienrutTien(float (float soTiensoTien))
{{
if (if (soTiensoTien <= <= m_soDum_soDu))
m_soDum_soDu = = soTiensoTien;;
}}
};};
24Phươ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.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

×