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

Lập trình hướng đối tượng tren C/C++ - OOP 08 object life cycle in 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 (550.62 KB, 21 trang )

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

×