VòngVòng đờiđời đốiđối tượngtượng trongtrong
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ội dungNội dung
KhởiKhởi tạotạo trongtrong kếkế thừathừa
HủyHủy trongtrong kếkế thừathừa
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Nội dungNội dung
KhởiKhởi tạotạo trongtrong kếkế thừathừa
HủyHủy trongtrong kếkế thừathừa
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KhởiKhởi tạotạo trongtrong kếkế thừathừa
Trình tự tạo lập đối tượng kế thừa:Trình tự tạo lập đối tượng kế thừa:
Nhà được xây từ móng đến mái.Nhà được xây từ móng đến mái.
Khái niệm được định nghĩa từ thấp đến cao.Khái niệm được định nghĩa từ thấp đến cao.
Đối tượng được tạo lập từ lõi đến vỏ.Đối tượng được tạo lập từ lõi đến vỏ.
Thành phần kế thừa từ lớp cơ sở được tạo trước.Thành phần kế thừa từ lớp cơ sở được tạo trước.
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Xây móng đến mái Định nghĩa thấp đến cao
Đối tượng kế thừa
Thành phần mới
Đối tượng cơ sở
Thành phần cơ sở
Tạo lập từ lõi đến vỏ
KhởiKhởi tạotạo trongtrong kếkế thừathừa
ThứThứ tựtự khởikhởi tạotạo ở ở đốiđối tượngtượng kếkế thừathừa::
PhươngPhương thứcthức khởikhởi tạotạo lớplớp cơcơ sởsở đượcđược gọigọi trướctrước
PhầnPhần lõilõi cơcơ sởsở đượcđược tạotạo trướctrước
PhươngPhương thứcthức khởikhởi tạotạo lớplớp kếkế thừathừa gọigọi sausau
PhầnPhần vỏvỏ mớimới đượcđược tạotạo sausau
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
LớpLớp kếkế thừathừa cócó thểthể lựalựa chọnchọn cáchcách tạotạo phầnphần lõilõi
ChỉChỉ địnhđịnh phươngphương thứcthức khởikhởi tạotạo lớplớp cơcơ sởsở
KhKhôngông chỉchỉ địnhđịnh: : khởikhởi tạotạo mặcmặc địnhđịnh đượcđược gọigọi
KhởiKhởi tạotạo trongtrong 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();GVCN();
GVCN(char *GVCN(char *
lopCNlopCN
););
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
public:public:
GiaoVienGiaoVien();();
GiaoVienGiaoVien(char *(char *hoTenhoTen,,
float float mucLuongmucLuong,,
intint ngayNghingayNghi););
};};
GVCN(char *GVCN(char *
lopCNlopCN
););
GVCN(char *GVCN(char *hoTenhoTen,,
float float mucLuongmucLuong,,
intint ngayNghingayNghi,,
char *char *lopCNlopCN););
};};
KhởiKhởi tạotạo trongtrong kếkế thừathừa
VíVí dụdụ::
GVCN::GVCN(char GVCN::GVCN(char **lopCNlopCN) ) : : GiaoVienGiaoVien(“Minh”, 500000, 0(“Minh”, 500000, 0))
{{
m_lopCNm_lopCN = new = new char[char[strlenstrlen((lopCNlopCN) + 1) + 1];];
strcpystrcpy((m_lopCNm_lopCN, , lopCNlopCN););
}}
GVCNGVCN::GVCN(char ::GVCN(char **hoTenhoTen, float , float mucLuongmucLuong, , intint ngayNghingayNghi, char *, char *lopCNlopCN))
: :
GiaoVienGiaoVien
((
hoTenhoTen
, ,
mucLuongmucLuong
, ,
ngayNghingayNghi
))
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
: :
GiaoVienGiaoVien
((
hoTenhoTen
, ,
mucLuongmucLuong
, ,
ngayNghingayNghi
))
{{
m_lopCNm_lopCN = new = new char[char[strlenstrlen((lopCNlopCN) + 1) + 1];];
strcpystrcpy((m_lopCNm_lopCN, , lopCNlopCN););
}}
GVCNGVCN::GVCN::GVCN()()
{{
}}
GiaoVien() được gọi trước
Nội dungNội dung
KhởiKhởi tạotạo trongtrong kếkế thừathừa
HủyHủy trongtrong kếkế thừathừa
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
HủyHủy trongtrong kếkế thừathừa
TrìnhTrình tựtự hủyhủy đốiđối tượngtượng kếkế thừathừa::
NgượcNgược lạilại vớivới trìnhtrình tựtự tạotạo lậplập
PhươngPhương thứcthức hủyhủy lớplớp kếkế thừathừa đượcđược gọigọi trướctrước
PhầnPhần vỏvỏ bênbên ngoàingoài đượcđược hủyhủy trướctrước
PhươngPhương thứcthức hủyhủy lớplớp kếkế cơcơ sởsở đượcđược gọigọi sausau
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhầnPhần lõilõi cơcơ sởsở đượcđược hủyhủy sausau
MỗiMỗi lớplớp chỉchỉ cócó mộtmột cáchcách hủyhủy
LớpLớp kếkế thừathừa khôngkhông cầncần
chỉchỉ địnhđịnh cáchcách hủyhủy lớplớp cơcơ sởsở
Đối tượng kế thừa
Thành phần mới
Đối tượng cơ sở
Thành phần cơ sở
Hủy từ vỏ đến lõi
HủyHủy trongtrong kếkế thừathừa
VíVí dụdụ::
GiaoVienGiaoVien::~::~GiaoVienGiaoVien()()
{{
delete delete m_hoTenm_hoTen;;
}}
GVCNGVCN::~GVCN::~GVCN()()
{{
~GVCN() được gọi trước
~GiaoVien() được gọi sau
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
{{
delete delete m_lopCNm_lopCN;;
}}
~GVCN() được gọi trước
Nội dungNội dung
KhởiKhởi tạotạo trongtrong kếkế thừathừa
HủyHủy trongtrong kếkế thừathừa
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
LuậtLuật ““baba ôngông lớnlớn””::
LớpLớp cócó thuộcthuộc tínhtính con con trỏtrỏ??
PhảiPhải tựtự thêmthêm vàovào lớplớp ““baba ôngông lớnlớn””::
PhươngPhương thứcthức hủyhủy
PhươngPhương thứcthức khởikhởi tạotạo saosao chépchép
ToánToán
tửtử
gángán
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ToánToán
tửtử
gángán
LớpLớp kếkế thừathừa cócó thuộcthuộc tínhtính con con trỏtrỏ??
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
Dr. Guru Dr. Guru khuyênkhuyên::
((LuậtLuật ““baba ôngông lớnlớn” ” trongtrong kếkế thừathừa))
LớpLớp kếkế thừathừa cócó thuộcthuộc tínhtính con con trỏtrỏ::
TrangTrang bịbị ““baba ôngông lớnlớn” ” chocho lớplớp kếkế thừathừa
KíchKích hoạthoạt ““baba ôngông lớnlớn” ” củacủa lớplớp cơcơ sởsở từtừ ““baba ôngông lớnlớn” ”
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
củacủa lớplớp kếkế thừathừa
VấnVấn đềđề con con trỏtrỏ trongtrong kếkế thừathừa
VíVí dụdụ::
class Aclass A
{{
public:public:
A(const A &a);A(const A &a);
A& operator =(const A &a);A& operator =(const A &a);
virtualvirtual ~A();~A();
};};
B::B(const B &b) B::B(const B &b) : A(b): A(b)
{{
// // CàiCài đặtđặt khởikhởi tạotạo saosao chépchép B.B.
}}
B& operator =(const B &b)B& operator =(const B &b)
{{
};};
class class BB: public : public AA
{{
public:public:
B(const B &b);B(const B &b);
B& operator =(const B &b);B& operator =(const B &b);
~B();~B();
};};
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
{{
A::operator =(b);A::operator =(b);
// // CàiCài đặtđặt toántoán tửtử = = chocho B.B.
}}
~B()~B() // // TựTự độngđộng gọigọi ~A().~A().
{{
}}
TómTóm tắttắt
KhởiKhởi tạotạo trongtrong kếkế thừathừa::
KhởiKhởi tạotạo từtừ lõilõi đếnđến vỏvỏ
TạoTạo lõilõi: : phươngphương thứcthức khởikhởi tạotạo lớplớp cơcơ sởsở gọigọi trướctrước
TạoTạo vỏvỏ: : phươngphương thứcthức khởikhởi tạotạo lớplớp kếkế thừathừa gọigọi sausau,,
CóCó thểthể chỉchỉ địnhđịnh phươngphương thứcthức khởikhởi tạotạo lớplớp cơcơ sởsở
HủyHủy trongtrong kếkế thừathừa::
HủyHủy từtừ vỏvỏ vàovào lõilõi
HủyHủy lõilõi: : phươngphương thứcthức hủyhủy lớplớp kếkế thừathừa
HủyHủy vỏvỏ: : phươngphương thứcthức hủyhủy lớplớp cơcơ sởsở
LuậtLuật ““baba ôngông lớnlớn” ” trongtrong kếkế thừathừa
15Phươ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 8.1:8.1:
class Aclass A
{ public:{ public:
A(A(intint iXiX) { }) { }
};};
class B: public Aclass B: public A
{ public:{ public:
B(): A(0) { }B(): A(0) { }
Cho Cho biếtbiết thứthứ tựtự gọigọi hàmhàm dựngdựng vớivới::
a) void main() { C a) void main() { C objobj(1, 2, 3); }(1, 2, 3); }
b) void main() { C b) void main() { C objobj(4); }(4); }
c) void main() { C c) void main() { C objobj; }; }
B(): A(0) { }B(): A(0) { }
B(B(intint iXiX, , intint iYiY): A(): A(iXiX) { }) { }
};};
class C: public Bclass C: public B
{ public:{ public:
C() { }C() { }
C(C(intint iZiZ) { }) { }
C(C(intint iXiX, , intint iYiY, , intint iZiZ): B(): B(iXiX, , iYiY) { }) { }
};};
16Phươ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 8.2:8.2:
GiảiGiải quyếtquyết baba vấnvấn đềđề con con trỏtrỏ chocho lớplớp GiaoVienGiaoVien vàvà GVCN.GVCN.
17Phươ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 8.3:8.3:
class X { };class X { };
class Y: public Xclass Y: public X
{{
public:public:
Y(Y(intint ii) { }) { }
Y(const Y &Y(const Y &
objobj
) { }) { }
Cho Cho biếtbiết thứthứ tựtự gọigọi hàmhàm dựngdựng vớivới::
a) void main() { Z a) void main() { Z objobj(5); }(5); }
b) void main() b) void main()
{{
Y obj1(6);Y obj1(6);
Y obj2(obj1);Y obj2(obj1);
Y(const Y &Y(const Y &
objobj
) { }) { }
};};
class Z: public Yclass Z: public Y
{{
public:public:
Z(Z(intint ii): Y(): Y(ii++) { }++) { }
};};
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Y obj2(obj1);Y obj2(obj1);
}}
c) void main()c) void main()
{{
Z obj1(7);Z obj1(7);
Z obj2(obj1);Z obj2(obj1);
}}
BàiBài tậptập
BàiBài tậptập 8.4:8.4:
HãyHãy vẽvẽ câycây kếkế thừathừa chocho nhữngnhững lớplớp đốiđối tượngtượng hìnhhình họchọc::
((cócó thểthể phátphát sinhsinh thêmthêm nhữngnhững lớplớp cơcơ sởsở cầncần thiếtthiết))
VuôngVuông Tam Tam giácgiác vuôngvuông
TrònTròn Tam Tam giácgiác câncân
Ellipse.Ellipse.
Tam Tam
giácgiác
vuôngvuông
câncân
Ellipse.Ellipse.
Tam Tam
giácgiác
vuôngvuông
câncân
ChữChữ nhậtnhật Tam Tam giácgiác đềuđều
ThoiThoi
BìnhBình hànhhành
ThangThang vuôngvuông
ThangThang câncân
19Phươ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 8.5:8.5:
MộtMột rạprạp chiếuchiếu phimphim cócó M M hànghàng ghếghế, , mỗimỗi hànghàng ghếghế cócó N N ghếghế
GiáGiá vévé đượcđược tínhtính theotheo vịvị trítrí ngồingồi saosao chocho càngcàng xaxa hànghàng ghếghế trungtrung tâmtâm
((cảcả trướctrước lẫnlẫn sausau) ) thìthì giágiá vévé càngcàng rẻrẻ, , xaxa hơnhơn mộtmột hànghàng ghếghế giảmgiảm 3000.3000.
CóCó 2 2 loạiloại rạprạp::
RạpRạp
thườngthường
: :
giágiá
vévé
ở ở
hànghàng
ghếghế
trungtrung
tâmtâm
làlà
80000.80000.
RạpRạp
thườngthường
: :
giágiá
vévé
ở ở
hànghàng
ghếghế
trungtrung
tâmtâm
làlà
80000.80000.
RạpRạp caocao cấpcấp: : giágiá vévé ở ở hànghàng ghếghế trungtrung tâmtâm làlà 120000, 120000, ngoàingoài rara
rạprạp cócó khuyếnkhuyến mãimãi giảmgiảm 2020% % giágiá vévé vàovào ngàyngày thứthứ nămnăm hànghàng tuầntuần
20Phươ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 8.5:8.5:
HãyHãy xâyxây dựngdựng lớplớp RapThuongRapThuong vàvà RapCaoCapRapCaoCap, , chocho phépphép::
KhởiKhởi tạotạo rạprạp phimphim vớivới sốsố lươnglương ghếghế M x N M x N chocho trướctrước
ĐặtĐặt vévé tạitại mộtmột vịvị trítrí ghếghế nàonào đóđó
Cho Cho biếtbiết giágiá vévé tạitại mộtmột vịvị trítrí ghếghế nàonào đóđó
Cho Cho
biếtbiết
mộtmột
vịvị
trítrí
ghếghế
nàonào
đóđó
còncòn
trốngtrống
khôngkhông
. .
Cho Cho
biếtbiết
mộtmột
vịvị
trítrí
ghếghế
nàonào
đóđó
còncòn
trốngtrống
khôngkhông
. .
Cho Cho biếtbiết sốsố ghếghế còncòn trốngtrống trongtrong rạprạp
TínhTính tổngtổng sốsố tiềntiền vévé bánbán đượcđược
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy