Ch
Ch
Ch
Ch
ơ
ơ
ơ
ơ
ng
ng
ng
ng
3
3
3
3
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
&
&
&
Class)
Class)
Class)
Class)
Mụcđíchchơngnày:
1.Kháiniệmvềđónggóidữliệu.
2.Khaibáovàsửdụngmộtlớp.
3.Khaibáovàsửdụngđốitợng,contrỏđốitợng,thamchiếuđối
tợng.
4.Hàmthiếtlậpvàhàmhuỷbỏ.
5.Khaibáovàsửdụnghàmthiếtlậpsaochép.
6.
Vaitròcủahàmthiếtlậpngầmđịnh.
1.
1.
1.
1.
Đố
Đố
Đố
Đố
i
i
i
i
t
t
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
=
=
=
=
D
D
D
D
ữ
ữ
ữ
ữ
li
c
NgônngữC++
-41-
dữliệukhôngquantrọngđốivớingờisửdụng.Vớimộtđốitợngđiểm,
ngờitachỉquantâmđếnviệccóthểthựchiệnđợcthaotácgìtrênnómà
khôngcầnbiếtcácthaotácđóđợcthựchiệnnhthếnào,cũngnhđiềugì
xảyrabêntrongbảnthânđốitợngđó.Tathờngnóiđólàsựtrừutợng
hoádữliệu(khicácchitiếtcàiđặtcụthểđợcgiấuđi).
Đónggóicónhiềulợiíchgópphầnnângcaochấtlợngcủachơng
trình.Nólàmchocôngviệcbảotrìchơngtrìnhthuậnlơihơnrấtnhiều:một
sựthayđổicấutrúccủamộtđốitợngchỉảnhhởngtớibảnthânđốitợng;
ngờisửdụngđốitợngkhôngcầnbiếtđếnthayđổinày(vớilậptrìnhcấu
trúcthìngờilậptrìnhphảitựquảnlýsựthayđổiđó).Chẳnghạncóthể
biểudiễntoạđộmộtđiểmdớidạngsốthực,khiđóchỉcóngờithiếtkế
đốitợngphảiquantâmđểsửalạiđịnhnghĩacủađốitợngtrongkhiđó
ngờisửdụngkhôngcầnhaybiếtvềđiềuđó,miễnlànhữngthayđổiđó
khôngtácđộngđếnviệcsửdụngđốitợngđiểm.
Tơngtựnhvậy,tacóthểbổsungthêmthuộctínhmàuvàmộtsốthao
táclênmộtđốitợngđiểm,đểcóđợcmộtđốitợngđiểmmàu.Rõrànglà
đónggóichophépđơngiảnhoáviệcsửdụngmộtđốitợng.
Tronglậptrìnhhớngđốitợng,đónggóichophépdữliệucủađối
tợngđợcchelấpkhinhìntừbênngoài,nghĩalànếungờidùngmuốntác
độnglêndữliệucủađốitợngthìphảigửiđếnđốitợngcácthông
điệp(message).ởđâycácphơngthứcđóngvaitròlàgiaodiệnbắtbuộc
giữacácđốitợngvàngờisửdụng.Tacónhậnxét:
Lờigọiđếnmột
phơngthứclàtruyềnmộtthôngbáođếnchođốitợng
.
Cácthôngđiệpgửitớiđốitợngnàosẽgắnchặtvớiđốitợngđóvàchỉ
đốitợngnàonhậnđợcthôngđiệpmớiphảithựchiệntheothôngđiệpđó;
2.
2.
2.
2.
L
L
L
L
ớ
ớ
ớ
ớ
p
p
p
p
2.1
2.1
2.1
2.1
Khai
Khai
Khai
Khai
b
b
b
b
á
á
class
<tênlớp>{
private:
private:
private:
private:
<khaibáocácthànhphầnriêngtrongtừngđốitợng>
public:
public:
public:
public:
<khaibáocácthànhphầncôngcộngcủatừngđối
tợng>
};
<địnhnghiãcủacáchàmthànhphầnchađợcđịnh
nghĩabêntrongkhaibáolớp>
NgônngữC++
-43-
V
V
V
V
í
í
í
í
d
d
d
cout<<"Hamthanhphaninit\n";
x=
ox;
y=
oy;
/*
x,ylàcácthànhphầncủađốitợnggọihàmthành
phần
*/
}
voidpoint::move(intdx,intdy)
{
cout<<"Hamthanhphanmove\n";
x
+=
dx;
y
+=
dy;
}
voidpoint::display()
{
cout<<"Hamthanhphandisplay\n";
cout<<"Toado:"<<x<<""<<y<<"\n";
}
NgônngữC++
-44-
voidmain()
{
clrscr();
x
é
é
é
é
t
t
t
t
7.Cóthểkhaibáotrựctiếpcáchàmthànhphầnbêntrongkhaibáolớp.
Tuyvậyđiềuđóđôikhilàmmấtmỹquancủachơngtrìnhnguồn,do
vậyngờitathờngsửdụngcáchkhaibáocáchàmthànhphầnởbên
ngoàikhaibáolớp.Khiđótasửdụngcúpháp:
8.Gọihàmthànhphầncủalớptừmộtđốitợngchínhlàtruyềnthông
điệpchohàmthànhphầnđó.Cúphápnhsau:
<tênkiểugiátrịtrảlại><tênlớp>::<tênhàm>(<danhsáchthamsố>){
<nộidung>
}
<tênđốitợng>.<tênhàmthànhphần>(<danhsáchcác
thamsốnếucó>);
NgônngữC++
-45-
2.1.1
2.1.1
2.1.1
2.1.1
T
T
T
T
Dođóvùngnhớđợccấpphátchomộtbiếnkiểulớpsẽchotamột
khungcủađốitợngbaogồmdữliệulàcácthểhiệncụthểcủacácmôtảdữ
liệutrongkhaibáolớpcùngvớicácthôngđiệpgửitớicáchàmthànhphần.
Mỗiđốitợngsởhữumộttậpcácbiếntơngứngvớitênvàkiểucủa
cácthànhphầndữliệuđịnhnghĩatronglớp.Tagọichúnglàcácbiếnthể
hiệncủađốitợng.Tuynhiêntấtcảcácđốitợngcùngmộtlớpchungnhau
địnhnghĩacủacáchàmthànhphần.
Lớplàmộtkiểudữliệuvìvậycóthểkhaibáocontrỏhaythamchiếu
đếnmộtđốitợngthuộclớpvàbằngcáchấycóthểtruynhậpgiántiếpđến
đốitợng.Nhngchúýlàcontrỏvàthamchiếukhôngphảilàmộtthểhiện
củalớp.
2.1.2
2.1.2
2.1.2
2.1.2
C
C
C
C
á
á
á
á
c
c
c
c
th
th
th
li
li
li
ệ
ệ
ệ
ệ
u
u
u
u
Cúphápkhaibáocácthànhphầndữliệugiốngnhkhaibáobiến:
KhungDL
Phơng
thức
Dữliệucụthể1
Thamchiếuphơng
thức
Dữliệucụthể2
Thamchiếuphơng
thức
Lớp
Đối
tợng
Đối
tợng
Hình3.2Đốitợnglàmộtthể
hiệncủalớp
<tênkiểu><tênthànhphần>;
<tênlớp><tênđốitợng>;
),kiểutrờngbit,kiểuliệtkê(enum)haycáckiểudongờidùng
địnhnghĩa.Thậmchí,thànhphầndữliệucòncóthểlàmộtđốitợngthuộc
lớpđãđợckhaibáotrớcđó.Tuynhiênkhôngthểdùngtrựctiếpcáclớp
đểkhaibáokiểuthànhphầndữliệuthuộcvàobảnthânlớpđangđợcđịnh
nghĩa.Muốnvậy,trongkhaibáocủamộtlớpcóthểdùngcáccontrỏhoặc
thamchiếuđếncácđốitợngcủachínhlớpđó.
Trongkhaibáocủacácthànhphầndữliệu,cóthểsửdụngtừkhoá
static
static
static
static
nhngkhôngđợcsửdụngcáctừkhoáauto
auto
auto
auto
,register
register
register
register
,extern
extern
extern
extern
trongkhaibáocácthànhphầndữliệu.Cũngkhôngthểkhaibáovàkhởiđầu
giátrịchocácthànhphầnđó.
2.1.3
2.1.3
2.1.3
2.1.3
C
à
nh
nh
nh
nh
ph
ph
ph
ph
ầ
ầ
ầ
ầ
n
n
n
n
Hàmđợckhaibáotrongđịnhnghĩacủalớpđợcgọilàhàmthành
phầnhayphơngthứccủalớp(hàmthànhphầnlàthuậtngữcủaC++,còn
phơngthứclàthuậtngữtronglậptrìnhhớngđốitợngnóichung).Các
hàmthànhphầncóthểtruynhậpđếncácthànhphầndữliệuvàcáchàm
thànhphầnkháctronglớp.Nhtrênđãnói,C++chophéphàmthànhphần
truynhậptớicácthànhphầncủacácđốitợngcùnglớp,miễnlàchúngđợc
khaibáobêntrongđịnhnghĩahàm(nhlàmộtđốitợngcụcbộhaymột
thamsốhìnhthứccủahàmthànhphần).Phầntiếpsausẽcócácvídụminh
hoạchokhảnăngnày.
Trongchơngtrình
point.cpp
,
trongkhaibáocủalớppointcóchứa
3.2
3.2
3.2
3.2
/*point1.cpp
point1.cpp
point1.cpp
point1.cpp
*/
1
Hàmthànhphầnđịnhnghĩatrongkhaibáolớpđợcchơngtrìnhdịchhiểulà
hàminline,
inline,
inline,
inline,
nênkhôngđợcquáphứctạp.
NgônngữC++
-47-
#include<iostream.h>
#include<conio.h>
classpoint
{
/*khaibáocácthànhphầndữliệuprivate*/
private:
intx,y;
/*khaibáocáchàmthànhphầnpublic*/
public:
/*Địnhnghĩahàmthànhphầnbêntrongkhaibáolớp*/
voidinit(intox,intoy){
cout<<"Hamthanhphaninit\n";
clrscr();
NgônngữC++
-48-
point
p;
p.init(2,4);
/*gọihàmthànhphầntừđốitợng*/
p.display();
p.move(1,2);
p.display();
getch();
}
Hamthanhphaninit
Hamthanhphandisplay
Toado:24
Hamthanhphanmove
Hamthanhphandisplay
Toado:36
Khiđịnhnghĩahàmthànhphầnởngoàilớp,dòngtiêuđềcủahàmthành
phầnphảichứatêncủalớpcóhàmlàthànhviêntiếptheolàtoántửđịnh
phạmvi::.Đólàcáchđểphânbiệthàmthànhphầnvớicáchàmtựdo,
đồngthờicònchophéphailớpkhácnhaucóthểcócáchàmthànhphần
cùngtên.
Cóthểđặtđịnhnghĩahàmthànhphầntrongcùngtậptinkhaibáolớp
hoặctrongmộttậptinkhác.Vídụsauđâysauđâylàmộtcảibiênkháctừ
point.
cpp,
trongđótađặtriêngkhaibáolớppointtrongmộttệptiêuđề.
Tệptiêuđềsẽđợcthamchiếutớitrongtệpchơngtrình
point2.cpp
#ifndefpoint_h
#definepoint_h
#include<iostream.h>
NgônngữC++
-49-
classpoint
{
/*khaibáocácthànhphầndữliệuprivate*/
private:
intx,y;
/*khaibáocáchàmthànhphầnpublic*/
public:
/*Địnhnghĩahàmthànhphầnbêntrongkhaibáolớp*/
voidinit(intox,intoy);
voidmove(intdx,intdy);
voiddisplay();
};
#endif
Tệpchơngtrìnhnguồn
/*point2.cpp*/
/*point2.cpp*/
/*point2.cpp*/
/*point2.cpp*/
/*Tậptinchơngtrình,địnhnghĩavàsửdụngcáchàmthànhphầntronglớp
pointđợckhaibáotrongtậptintiêuđềpoint.h*/
#include
point.h
/*chènđịnhnghĩalớppointvàochơngtrình*/
}
voidmain()
{
clrscr();
point
p;
p.init(2,4);
/*gọihàmthànhphầntừđốitợng*/
p.display();
p.move(1,2);
p.display();
getch();
}
Hamthanhphaninit
Hamthanhphandisplay
Toado:24
Hamthanhphanmove
Hamthanhphandisplay
Toado:36
2.1.4
2.1.4
2.1.4
2.1.4
Tham
Tham
Tham
Tham
s
s
s
l
l
l
ờ
ờ
ờ
ờ
i
i
i
i
g
g
g
g
ọ
ọ
ọ
ọ
i
i
i
i
h
h
h
h
à
à
à
cógiátrịngầmđịnh.Lờigọihàmthànhphầnluôncómộtvàchỉmộttham
sốngầmđịnhlàđốitợngthựchiệnlờigọihàm.Nhthếcácbiếnx,ytrong
địnhnghĩacủacáchàmpoint::init(),point::display(),haypoint::move()
chínhlàcácbiếnthểhiệncủađốitợngdùnglàmthamsốngầmđịnhtrong
lờigọihàm.Dovậylờigọihàmthànhphần:
p.init(2,4)
sẽgán2chop.xcònp.ysẽcógiátrị4.
NgônngữC++
-51-
Tấtnhiên,theonguyêntắcđónggói,khônggántrịchocácthànhphần
dữliệucủađốitợngmộtcáchtrựctiếp.
p.x
=
2;
p.y
=
4;
Hơnnữa,khôngthểthựchiệnlờigọitớihàmthànhphầnnếukhôngchỉ
rõđốitợngđợcthamchiếu.Chỉthị:
init(5,2);
tronghàm
main
sẽcóthểgâylỗibiêndịchnếutrongchơngtrình
khôngcóhàmtựdovớitên
init
.
2.1.5
2.1.5
2.1.5
2.1.5
khaibáobiến:phạmvikhốilệnh,phạmvitệp,phạmvichơngtrìnhvà
phạmvihàmnguyênmẫu,trongđóthờngdùngnhấtlàphạmvitoàncục
(tệp,chơngtrình)vàphạmvicụcbộ(khốilệnh,hàm).Mụcđíchcủaphạm
vilàđểkiểmsoátviệctruyxuấtđếncácbiến/hằng/hàm.
Đểkiểmsoáttruynhậpđếncácthànhphần(dữliệu,hàm)củacáclớp,
C++đarakháiniệmphạmvilớp.Tấtcảcácthànhphầncủamộtlớpsẽ
đợccoilàthuộcphạmvilớp;trongđịnhnghĩahàmthànhphầncủalớpcó
thểthamchiếuđếnbấtkỳmộtthànhphầnnàokháccủacùnglớpđó.Tuân
theoýtởngđónggói,C++coitấtcảcácthànhphầncủamộtlớpcóliênhệ
vớinhau.Ngoàira,C++cònchophépmởrộngphạmvilớpđếncáclớpcon
cháu,bạnbèvàhọhàng(Xemthêmchơng5-Kếthừavàcácmụctiếpsau
đểhiểurõhơn).
2.1.6
2.1.6
2.1.6
2.1.6
T
T
T
T
ừ
ừ
ừ
ừ
kho
kho
kho
kho
á
á
c
c
c
c
t
t
t
t
í
í
í
í
nh
nh
nh
nh
truy
truy
truy
truy
xu
xu
xu
xu
ấ
ấ
ấ
ấ
t
t
public
public
làcáctừkhoáxácđịnhthuộctínhtruyxuất.Mọithànhphầnđợc
liệtkêtrongphầnpublic
public
public
public
đềucóthểtruyxuấttrongbấtkỳhàmnào.Những
NgônngữC++
-52-
thànhphầnđợcliệtkêtrongphầnprivate
private
private
private
chỉđợctruyxuấtbêntrong
phạmvilớp,bởichúngthuộcsởhữuriêngcủalớp,trongkhiđócácthành
phầnpublic
public
public
public
thuộcsởhữuchungcủamọithànhphầntrongchơngtrình.
Vớikhaibáolớppointtathấyrằngcácthànhphầnprivate
private
private
private
đợctính
từchỗnóxuấthiệnchođếntrớcnhãnpublic
public
public
public
ụ
3.4
3.4
3.4
3.4
/*tamgiac.cpp*/
/*tamgiac.cpp*/
/*tamgiac.cpp*/
/*tamgiac.cpp*/
#include<iostream.h>
#include<math.h>
#include<conio.h>
/*khaibáolớptamgiác*/
classtamgiac{
private:
floata,b,c;
/*độdàibacạnh*/
public:
voidnhap();
/*nhậpvàođộdàibacạnh*/
voidin();
/*inracácthôngtinliênquanđếntamgiác*/
private:
intloaitg();
/*chobiếtkiểucủatamgiác:1-d,2-vc,3-c,4-v,5-t*/
floatdientich();
/*tínhdiệntíchcủatamgiác*/
};
/*địnhnghĩahàmthànhphần*/
voidtamgiac::nhap()
{
case
1:
cout<<"Tamgiacdeu\n";break;
case
2:
cout<<"Tamgiacvuongcan\n";break;
case
3:
cout<<"Tamgiaccan\n";break;
case
4:
cout<<"Tamgiacvuong\n";break;
default:cout<<"Tamgiacthuong\n";break;
}
}
floattamgiac::dientich()
{
return(0.25*sqrt((a+b+c)*(a+b-c)*(a-b+c)*(-a+b+c)));
}
inttamgiac::loaitg()
{
if
(a==b||b==c||c==a)
if
(a==b
&&
b==c)
return
1;
Tamgiacdeu
Canha:3
Canhb:4
Canhc:5
Dodaibacanh:345
Dientichtamgiac:6
Tamgiacvuong
Cácthànhphầntrongmộtlớpcóthểđợcsắpxếpmộtcáchhếtsứctuỳ
ý.Dođócóthểsắpxếplạicáckhaibáohàmthànhphầnđểchocácthành
phầnprivate
private
private
private
ởtrên,còncácthànhphầnpublic
public
public
public
ởdớitrongkhaibáolớp.
Chẳnghạncóthểđaramộtkhaibáokháccholớptamgiactrong
tamgiac.cppnhsau:
classtamgiac{
private:
floata,b,c;
/*độdàibacạnh*/
intloaitg();
/*chobiếtkiểucủatamgiác:1-d,2-vc,3-c,4-v,5-t*/
floatdientich();
/*tínhdiệntíchcủatamgiác*/
public:
voidnhap();
intloaitg();
/*chobiếtkiểucủatamgiác:1-d,2-vc,3-c,4-v,5-t*/
floatdientich();
/*tínhdiệntíchcủatamgiác*/
public:
voidnhap();
/*nhậpvàođộdàibacạnh*/
voidin();
/*inracácthôngtinliênquanđếntamgiác*/
};
NgônngữC++
-57-
2.1.7
2.1.7
2.1.7
2.1.7
G
G
G
G
ọ
ọ
ọ
ọ
i
i
i
i
m
m
nh
nh
nh
nh
ph
ph
ph
ph
ầ
ầ
ầ
ầ
n
n
n
n
trong
trong
trong
trong
m
m
m
m
ộ
ộ
ộ
ộ
t
t
ầ
ầ
ầ
ầ
n
n
n
n
kh
kh
kh
kh
á
á
á
á
c
c
c
c
Khikhaibáolớp,cóthểgọihàmthànhphầntừmộthàmthànhphần
kháctrongcùnglớpđó.Khimuốngọimộthàmtựdotrùngtênvàdanhsách
thamsốtaphảisửdụngtoántửphạmvi
::
.Bạnđọccóthểkiểmnghiệm
điềunàybằngcáchđịnhnghĩamộthàmtựdotên
loaitg
vàgọinótrong
địnhnghĩacủahàm
đơngvớimộtcấutrúc,khôngcóphạmvilớp.C++cũngchophépkhai
báocáccấutrúcvớicáchàmthànhphần.Haikhaibáosaulàtơng
đơngnhau:
10.Ngoàipublic
public
public
public
vàprivate
private
private
private
,còncótừkhoáprotected
protected
protected
protected
(đợcbảovệ)
dùngđểchỉđịnhtrạngtháicủacácthànhphầntrongmộtlớp.
Trongphạmvicủalớphiệntạimộtthànhphầnprotected
protected
protected
protected
cótính
chấtgiốngnhthànhphầnprivate
private
private
private
.
2.2
2.2
2.2
a
a
a
c
c
c
c
á
á
á
á
c
c
c
c
h
h
h
h
à
à
à
à
m
m
m
m
th
th
th
nh
nh
nh
ngh
ngh
ngh
ngh
ĩ
ĩ
ĩ
ĩ
a
a
a
a
ch
ch
ch
ch
ồ
ồ
ồ
ồ
ng
ng
ng
ng
c
c
c
nh
nh
nh
ph
ph
ph
ph
ầ
ầ
ầ
ầ
n.
n.
n.
n.
Cáchàmthànhphầncóthểcótrùngtênnhngphảikhácnhauởkiểu
giátrịtrảvề,danhsáchkiểucácthamsố.Hàmthànhphầnđợcphépgọitới
cáchàmthànhphầnkhác,thậmchítrùngtên.Chơngtrình
point3.cpp
sau
đâylàmộtcảibiênmớicủa
point.cpp
:
V
V
V
V
í
í
í
};
NgônngữC++
-58-
#include<iostream.h>
#include<conio.h>
classpoint
{
intx,y;
public:
/*địnhnghĩachồngcáchàmthànhphầninitvàdisplay*/
voidinit();
voidinit(int);
voidinit(int,int);
voiddisplay();
voiddisplay(char*);
};
voidpoint::init()
{
x=y=0;
}
voidpoint::init(intabs)
{
x=abs;y=0;
}
voidpoint::int(intabs,intord)
{
x=abs;
y=ord;
}
voidpoint::display()
c;
c.init(3,12);
/*point::init(int,int)*/
c.display("Hello ");
getch();
}
Toado:00
pointb-Toado:50
Hello Toado:312
2.2.2
2.2.2
2.2.2
2.2.2
C
C
C
C
á
á
á
á
c
c
c
c
tham
tham
tham
tham
s
tr
ị
ị
ị
ị
ng
ng
ng
ng
ầ
ầ
ầ
ầ
m
m
m
m
đị
đị
đị
đị
nh
nh
nh
nh
Giốngnhcáchàmthôngthờng,lờigọihàmthànhphầncóthểsử
dụnggiátrịngầmđịnhchocácthamsố.Giátrịngầmđịnhnàysẽđợckhai
báotrongđịnhnghĩahàmthànhphầnhaytrongkhaibáo(trongkhaibáolớp)
củanó.Chơngtrình
point4.cpp
classpoint
{
intx,y;
Ng«nng÷C++
-60-
public:
voidinit(int=0,int=0);
voiddisplay(char
*=””);
};
voidpoint::int(intabs,intord)
{
x=abs;
y=ord;
}
voidpoint::display(char*mesg)
{
cout<<mesg;
display();
}
voidmain()
{
clrscr();
point
a;
a.init();
/*a.init(0,0)*/
a.display();
/*a.display(
“”
ử
ử
d
d
d
d
ụ
ụ
ụ
ụ
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ủ
ủ
a
a
a
a
h
h
h
h
à
à
à
à
m
m
m
m
th
th
th
th
à
à
à
à
nh
nh
nh
nh
p
p
p
p
đế
đế
đế
đế
n
n
n
n
c
c
c
c
á
á
á
á
c
c
c
c
th
th
th
th
à
à
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
Hàmthànhphầncóquyềntruynhậpđếncácthànhphầnprivate
private
private
private
của
đốitợnggọinó.Xemđịnhnghĩahàmthànhphầnpoint::init():
voidpoint::int(intabs,intord)
{
x=abs;
y=ord;
}
2.2.3.2
2.2.3.2
2.2.3.2
á
á
á
c
c
c
c
th
th
th
th
à
à
à
à
nh
nh
nh
nh
ph
ph
ph
ph
ầ
ầ
ầ
ầ
n
n
n
ố
ố
ố
l
l
l
l
à
à
à
à
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
th
th
th
à
à
à
à
nh
nh
nh
nh
ph
ph
ph
ph
ầ
ầ
ầ
ầ
n.
n.
n.
n.
Hàmthànhphầncóquyềntruynhậpđếntấtcảcácthànhphầnprivate
private
private
private
củacácđốitợng,thamchiếuđốitợnghaycontrỏđốitợngcócùngkiểu
lớpkhiđợcdùnglàthamsốhìnhthứccủanó.
classpoint
ù
ù
ù
ù
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
nh
nh
v
v
v
v
ề
ề
ề
ề
c
c
c
c
ủ
ủ
ủ
ủ
a
a
a
a
h
h
h
h
à
à
à
à
m
m
à
à
à
à
m
m
m
m
trong
trong
trong
trong
c
c
c
c
ù
ù
ù
ù
ng
ng
ng
ng
l
l
l
l
ớ
ớ
Con
Con
tr
tr
tr
tr
ỏ
ỏ
ỏ
ỏ
this
this
this
this
Từkhoáthis
this
this
this
trongđịnhnghĩacủacáchàmthànhphầnlớpdùngđểxác
địnhđịachỉcủađốitợngdùnglàmthamsốngầmđịnhchohàmthànhphần.
Nóicáchkhác,contrỏthis
this
this
this
thamchiếuđếnđốitợngđanggọihàmthành
phần.Nhvậy,cóthểtruynhậpđếncácthànhphầncủađốitợnggọihàm
thànhphầngiántiếpthôngquathis
this
this
this
é
é
é
p
p
p
p
g
g
g
g
á
á
á
á
n
n
n
n
c
c
c
c
á
á
á
á
c
c
c
sangđốitợng
b
tơngứngtừngđôimột(khôngkểđólàcác
thànhphầnpublic
public
public
public
hayprivate
private
private
private
).
2
y
5
b
a
x
5
2
x
y
NgônngữC++
-64-
Ch
Ch
Ch
Ch
ú
ú
H
à
à
à
à
m
m
m
m
thi
thi
thi
thi
ế
ế
ế
ế
t
t
t
t
l
l
l
l
ậ
ậ
ậ
ậ
p
à
m
m
m
m
hu
hu
hu
hu
ỷ
ỷ
ỷ
ỷ
b
b
b
b
ỏ
ỏ
ỏ
ỏ
(
(
(
(
destructor
destructor
destructor
destructor
)
t
l
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
4.1.1
4.1.1
4.1.1
4.1.1
Ch
Ch
Ch
Ch
ứ
ứ
ứ
ứ
c
c
c
c
n
à
m
m
m
m
thi
thi
thi
thi
ế
ế
ế
ế
t
t
t
t
l
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
Hàmthiếtlậplàmộthàmthànhphầnđặcbiệtkhôngthểthiếuđợc