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

Lập trình hướng đối tượng C/C++ -OOP 03 object life cycle

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 (577.88 KB, 25 trang )

VòngVòng
đờiđời
đốiđối
tượngtượng
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
VòngVòng
đờiđời
đốiđối
tượngtượng
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức hủyhủy
 ThànhThành phầnphần tĩnhtĩnh
 Class Template.Class Template.
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức hủyhủy
 ThànhThành phầnphần tĩnhtĩnh
 Class Template.Class Template.
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhươngPhương thứcthức khởikhởi tạotạo
 VấnVấn đềđề khởikhởi tạotạo thôngthông tin tin đốiđối tượngtượng::

GiáGiá trịtrị ban ban đầuđầu củacủa thuộcthuộc tínhtính??
class class PhanSoPhanSo
{{
private:private:
intint m_tum_tu;;
intint


m_maum_mau
;;
void void mainmain()()
{{
PhanSoPhanSo p;p;
// // GiáGiá trịtrị củacủa p??p??
}}
intint
m_maum_mau
;;
};};
 KhởiKhởi tạotạo bằngbằng phươngphương thứcthức truytruy xuấtxuất
class class PhanSoPhanSo
{{
public:public:
void void ganTuganTu((intint tutu););
void void ganMauganMau((intint maumau););
};};
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
}}
void void mainmain()()
{{
PhanSoPhanSo p;p;
p.ganTup.ganTu(1);(1);
p.ganMaup.ganMau(3);(3);
}}
PhươngPhương thứcthức khởikhởi tạotạo
 VấnVấn đềđề khởikhởi tạotạo thôngthông tin tin đốiđối tượngtượng::

NhượcNhược điểmđiểm củacủa phươngphương thứcthức truytruy xuấtxuất::

 Vi Vi phạmphạm ““tínhtính chấtchất hộphộp đenđen”.”.
 NgườiNgười dùngdùng quênquên gọigọi
 ““LàmLàm khaikhai sinhsinh” ” chocho đốiđối tượngtượng

PhươngPhương
thứcthức
khởikhởi
tạotạo


PhươngPhương
thứcthức
khởikhởi
tạotạo

5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhươngPhương thứcthức khởikhởi tạotạo
 TínhTính chấtchất phươngphương thứcthức khởikhởi tạotạo::

BắtBắt buộcbuộc gọigọi khikhi khaikhai báobáo đốiđối tượngtượng
 CóCó thểthể nạpnạp chồngchồng nhiềunhiều phươngphương thứcthức
 KhôngKhông cócó giágiá trịtrị trảtrả vềvề
 CóCó têntên trùngtrùng têntên lớplớp ((trongtrong C++).C++).
class class PhanSoPhanSo
{{
private:private:
intint m_tum_tu;;
intint m_maum_mau;;
public:public:
PhanSoPhanSo((intint tutu, , intint maumau););

PhanSoPhanSo((intint giaTrigiaTri););
};};
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
void void mainmain()()
{{
PhanSoPhanSo p1(1, 2p1(1, 2););
PhanSoPhanSo p2(1, p2(1, 33););
PhanSoPhanSo *p3 = new *p3 = new PhanSoPhanSo(2, 3(2, 3););
}s}s
PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức khởikhởi tạotạo mặcmặc địnhđịnh::

““LàmLàm khaikhai sinhsinh” ” mặcmặc địnhđịnh chocho đốiđối tượngtượng
 KhôngKhông cócó thamtham sốsố
 NếuNếu lớplớp khôngkhông cócó phươngphương thứcthức khởikhởi tạotạo
 TrìnhTrình biênbiên dịchdịch tựtự cấpcấp
class class PhanSoPhanSo
{{
private:private:
intint m_tuSom_tuSo;;
intint m_mauSom_mauSo;;
public:public:
PhanSoPhanSo();();
};};
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
void void mainmain()()
{{
PhanSoPhanSo p;p;
PhanSoPhanSo *q = new *q = new PhanSoPhanSo;;
}}

PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức khởikhởi tạotạo saosao chépchép::

““LàmLàm khaikhai sinhsinh” ” bằngbằng saosao chépchép đốiđối tượngtượng kháckhác
 ThamTham sốsố làlà đốiđối tượngtượng cùngcùng lớplớp
 LuônLuôn tồntồn tạitại trongtrong lớplớp ((trìnhtrình biênbiên dịchdịch cấpcấp).).
class class PhanSoPhanSo
{{
void void mainmain()()
{{
{{
private:private:
intint m_tuSom_tuSo;;
intint m_mauSom_mauSo;;
public:public:
PhanSoPhanSo(const (const PhanSoPhanSo &p);&p);
};};
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
{{
PhanSoPhanSo p1(1, 2p1(1, 2););
PhanSoPhanSo p2(p1p2(p1););
PhanSoPhanSo p3 = p2p3 = p2;;
}}
PhươngPhương thứcthức khởikhởi tạotạo
 Dr. Guru Dr. Guru khuyênkhuyên::

MộtMột lớplớp nênnên cócó tốitối thiểuthiểu 3 3 phươngphương thứcthức khởikhởi tạotạo::
 KhởiKhởi tạotạo mặcmặc địnhđịnh
 KhởiKhởi tạotạo saosao chépchép
 KhởiKhởi tạotạo vớivới đầyđầy đủđủ thôngthông tin.tin.

class class
PhanSoPhanSo
class class
PhanSoPhanSo
{{
private:private:
intint m_tum_tu;;
intint m_maum_mau;;
public:public:
PhanSoPhanSo();();
PhanSoPhanSo(const (const PhanSoPhanSo &p);&p);
PhanSoPhanSo((intint tutu, , intint maumau););
};};
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức hủyhủy
 ThànhThành phầnphần tĩnhtĩnh
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhươngPhương thứcthức hủyhủy
 VấnVấn đềđề ròrò rỉrỉ bộbộ nhớnhớ (memory leak):(memory leak):

BộBộ nhớnhớ cấpcấp chocho con con trỏtrỏ khôngkhông tựtự đượcđược thuthu hồihồi
 LàmLàm saosao thuthu hồihồi??
 XâyXây dựngdựng phươngphương thứcthức thuthu hồihồi
 NgườiNgười dùngdùng quênquên gọigọi
““
LàmLàm
didi
chúcchúc

” ”
chocho
đốiđối
tượngtượng

HocSinh
Họ tên

Điểm
văn

““
LàmLàm
didi
chúcchúc
” ”
chocho
đốiđối
tượngtượng

 PhươngPhương thứcthức hủyhủy
class class HocSinhHocSinh
{{
private:private:
charchar **m_hoTenm_hoTen;;
public:public:
void void thuHoiBoNhothuHoiBoNho() { () {
delete delete m_hoTenm_hoTen; }; }
};};
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy


Điểm
văn
Điểm toán
void void mainmain()()
{{
HocSinhHocSinh h;h;
h.thuHoiBoNhoh.thuHoiBoNho();();
}}
PhươngPhương thứcthức hủyhủy
 TínhTính chấtchất phươngphương thứcthức hủyhủy::

TựTự độngđộng gọigọi khikhi đốiđối tượngtượng bịbị hủyhủy
 DuyDuy nhấtnhất chocho mỗimỗi lớplớp
 CóCó têntên ~<~<TênTên lớplớp>> ((trongtrong C++).C++).
class class HocSinhHocSinh
{{
void void mainmain()()
{{
{{
private:private:
charchar **m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
public:public:
~~HocSinhHocSinh() { delete () { delete m_hoTenm_hoTen; }; }
};};
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
{{
HocSinhHocSinh h;h;

HocSinhHocSinh *p = *p = new new HocSinhHocSinh;;
delete delete pp;;
}}
NộiNội dungdung
 PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức hủyhủy
 ThànhThành phầnphần tĩnhtĩnh
 Class Template.Class Template.
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThànhThành phầnphần tĩnhtĩnh
 ChiaChia sẻsẻ giữagiữa cáccác đốiđối tượngtượng cùngcùng lớplớp::

MỗiMỗi đốiđối tượngtượng cócó bảnbản saosao riêngriêng::
 ThuộcThuộc tínhtính
 PhươngPhương thứcthức
 ThànhThành phầnphần đốiđối tượngtượng
MuốnMuốn
dùngdùng
chungchung
thôngthông
tin?tin?
PhanSo
Tử số
Mẫu số

MuốnMuốn
dùngdùng
chungchung
thôngthông
tin?tin?

 ThànhThành phầnphần tĩnhtĩnh
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Rút gọn()
p1: PhanSo
Tử số: 1
Mẫu số: 2
Rút gọn()
p1: PhanSo
Tử số: 1
Mẫu số: 2
Rút gọn()
p2: PhanSo
Tử số: 1
Mẫu số: 3
Rút gọn()
p2: PhanSo
Tử số: 1
Mẫu số: 3
Rút gọn()
ThànhThành phầnphần tĩnhtĩnh
 TínhTính chấtchất thànhthành phầnphần tĩnhtĩnh::

ThuộcThuộc tínhtính, , phươngphương thứcthức thuộcthuộc phạmphạm vi vi lớplớp
 DùngDùng chungchung chocho mọimọi đốiđối tượngtượng củacủa lớplớp
 KhaiKhai báobáo bằngbằng từtừ khóakhóa “static” (“static” (trongtrong C++).C++).
 TruyTruy xuấtxuất bằngbằng toántoán tửtử :: (:: (trongtrong C++).C++).
class class PhanSoPhanSo
{{
private:private:
static static intint m_giaTriLNm_giaTriLN;;

public:public:
static static intint layGiaTriLNlayGiaTriLN();();
private:private:
intint m_tum_tu;;
intint m_maum_mau;;
};};
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhanSoPhanSo::::m_giaTriLNm_giaTriLN = = 10000;10000;
void void mainmain()()
{{
intint x x = = PhanSoPhanSo::::layGiaTriLNlayGiaTriLN();();
}}
NộiNội dungdung
 PhươngPhương thứcthức khởikhởi tạotạo
 PhươngPhương thứcthức hủyhủy
 ThànhThành phầnphần tĩnhtĩnh
 Class Template.Class Template.
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Class TemplateClass Template
 XétXét lớplớp mảngmảng::

CácCác phầnphần tửtử làlà sốsố nguyênnguyên
 TổngTổng quátquát: : cáccác phầnphần tửtử kiểukiểu bấtbất kỳkỳ
 ThamTham sốsố hóahóa thuộcthuộc tínhtính, , phươngphương thứcthức
 Class Template.Class Template.
17Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Class TemplateClass Template
 CáchCách sửsử dụngdụng Class Template:Class Template:
template <class T>template <class T>
class class MangMang

{{
private:private:
intint m_kichThuocm_kichThuoc;;
TT
**
m_duLieum_duLieu
;;
void main()void main()
{{
MangMang<<intint>> m1(10);m1(10);
intint a = m1.layPhanTu(5);a = m1.layPhanTu(5);
MangMang
<<
PhanSoPhanSo
>>
m2(5);m2(5);
TT
**
m_duLieum_duLieu
;;
public:public:
MangMang((intint kichThuockichThuoc););
TT layPhanTulayPhanTu((intint viTriviTri););
};};
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MangMang
<<
PhanSoPhanSo
>>
m2(5);m2(5);

PhanSoPhanSo p = m2.layPhanTu(2);p = m2.layPhanTu(2);
}}
TómTóm tắttắt
 PhươngPhương thứcthức khởikhởi tạotạo::

““LàmLàm khaikhai sinhsinh” ” chocho đốiđối tượngtượng
 BắtBắt buộcbuộc gọigọi khikhi khaikhai báobáo
 CóCó thểthể nạpnạp chồngchồng

PhươngPhương
thứcthức
hủyhủy
::

PhươngPhương
thứcthức
hủyhủy
::
 ““LàmLàm didi chúcchúc” ” chocho đốiđối tượngtượng
 TựTự độngđộng gọigọi khikhi hủyhủy
 CóCó duyduy nhấtnhất mộtmột
19Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TómTóm tắttắt
 ThànhThành phầnphần tĩnhtĩnh::

DùngDùng chungchung chocho đốiđối tượngtượng củacủa lớplớp
 KhaiKhai báobáo bằngbằng từtừ khóakhóa “static”.“static”.
 TruyTruy xuấtxuất bằngbằng toántoán tửtử ::.::.

Class Template:Class Template:


Class Template:Class Template:
 ThamTham sốsố hóahóa kiểukiểu dữdữ liệuliệu thuộcthuộc tínhtính
 LưuLưu trữtrữ vàvà xửxử lýlý tổngtổng quátquát trêntrên nhiềunhiều kiểukiểu
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 3.1:3.1:
TrangTrang bịbị chocho lớplớp phânphân sốsố nhữngnhững cáchcách khởikhởi tạotạo sausau::
 KhởiKhởi tạotạo mặcmặc địnhđịnh phânphân sốsố = 0.= 0.
 KhởiKhởi tạotạo vớivới tửtử vàvà mẫumẫu chocho trướctrước
 KhởiKhởi tạotạo từtừ giágiá trịtrị nguyênnguyên chocho trướctrước

KhởiKhởi
tạotạo
từtừ
mộtmột
phânphân
sốsố
kháckhác


KhởiKhởi
tạotạo
từtừ
mộtmột
phânphân
sốsố
kháckhác

21Phươ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 3.2:3.2:
TrangTrang bịbị chocho lớplớp họchọc sinhsinh nhữngnhững cáchcách khởikhởi tạotạo vàvà hủyhủy sausau::
 KhởiKhởi tạotạo vớivới họhọ têntên vàvà điểmđiểm vănvăn, , toántoán chocho trướctrước
 KhởiKhởi tạotạo vớivới họhọ têntên chocho trướctrước, , điểmđiểm vănvăn, , toántoán = 0.= 0.
 KhởiKhởi tạotạo từtừ mộtmột họchọc sinhsinh kháckhác

HủyHủy
đốiđối
tượngtượng
họchọc
sinhsinh
, ,
thuthu
hồihồi
bộbộ
nhớnhớ


HủyHủy
đốiđối
tượngtượng
họchọc
sinhsinh
, ,
thuthu
hồihồi
bộbộ
nhớnhớ


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 3.3:3.3:
TrangTrang bịbị chocho lớplớp mảngmảng sốsố nguyênnguyên nhữngnhững cáchcách khởikhởi tạotạo vàvà hủyhủy sausau::
 KhởiKhởi tạotạo mặcmặc địnhđịnh mảngmảng kíchkích thướcthước = 0.= 0.
 KhởiKhởi tạotạo vớivới kíchkích thướcthước chocho trướctrước, , cáccác phầnphần tửtử = 0.= 0.
 KhởiKhởi tạotạo từtừ mộtmột mảngmảng intint [ ] [ ] vớivới kíchkích thướcthước chocho trướctrước

KhởiKhởi
tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
mảngmảng
kháckhác


KhởiKhởi
tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
mảngmảng
kháckhác

 HủyHủy đốiđối tượngtượng mảngmảng, , thuthu hồihồi bộbộ 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 3.4:3.4:
TrangTrang bịbị chocho lớplớp phânphân sốsố nhữngnhững phươngphương thứcthức sausau::
 ĐếmĐếm sốsố lượnglượng phânphân sốsố đượcđược tạotạo rara
 TạoTạo vàvà trảtrả vềvề phânphân sốsố vớivới tửtử vàvà mẫumẫu chocho trướctrước
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 3.5:3.5:
XâyXây dựngdựng lớplớp mảngmảng kiểukiểu dữdữ liệuliệu bấtbất kỳkỳ
25Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy

×