You are on page 1of 16

Ngn ng lp trnh C++1

THAM CHIU (Reference)

Tham chiu l g? Gii hn ca tham chiu Truyn tham chiu cho hm Hm tr v nhiu gi tr Hm to bn sao Con tr v tham chiu Tham chiu con tr

THAM CHIU L G ?
L mt b danh ca bin khc Khi to ra mt tham chiu, gn n ln mt i tng khc th tham chiu hot ng nh chnh i tng gn n n C php:
Kiu &TnThamChiu = MtiTngTnTi;

V d:
Sinhvien sv_lop_T14A; Sinhvien &sv1 = sv_lop_T14A;

THAM CHIU L G ?

a ch ca tham chiu: l a ch ca i tng m n tham chiu n. Tng t nh trong thc t khi mt b danh c gn vi mt ngi no c th. Ch : khng th gn li thm mt ln na tn ca tham chiu cho mt i tng khc.

GII HN CA THAM CHIU


-

C th thc hin tham chiu vi i tng no? phi tham chiu n mt i tng c th!
V d cc khai bo sau l sai 1) int &sn=int; 2) Sinhvien &sv1=Sinhvien; Cc khai bo ng 1) int sn=20; int &i=sn; 2) Sinhvien sv_lop_T14A;
Sinhvien &sv1 = sv_lop_T14A;

TRUYN THAM CHIU CHO HM(1) Nhc li v truyn tham tr:


i s truyn cho hm l cc gi tr Cu lnh return cho php tr v mt gi tr
void Doicho(int x, int y) { int tam; tam=x; x=y; y=tam; }

Gi tr ca cc i s x, y ch c i ch cho nhau trong pham vi ca hm

TRUYN THAM CHIU CHO HM(2)

Gii quyt bng con tr


void Doicho(int *px, int *py); { int tam; tam=*px; *px=*py; *py=tam; }

Khi gi hm phi truyn i s l con tr


int x=5,y=7; Doicho(&x,&y);

Lc ny 2 gi tr x v y mi thc s c i ch cho nhau

TRUYN THAM CHIU CHO HM(3)

Gii quyt bng truyn tham chiu n hm: i tng thc s c truyn n hm C th sa i c gi tr ca i tng
void Doicho(int &x, int &y) { int tam; tam=x; x=y; y=tam;}

Khi goi hm, bin c truyn trc tip, 2 gi tr x v y thc s c i ch cho nhau
Doicho(x,y);

HM TR V NHIU GI TR(1)
Hm ch c th tr v mt gi tr. Chng ta s s dng k thut truyn tham chiu thay i cc i tng ngoi ngay bn trong hm, v nh vy hm c th tr v nhiu gi tr S dng con tr S dng tham chiu

HM TR V NHIU GI TR(3)

S dng con tr
void HinhTron(int r, int *dientich, int *chuvi) { *dientich = 3.14 * r * r; *chuvi = 2 * 3.14 * r; }

Khi gi hm phi truyn a ch


RutgonPS(r, &dt,&cv);

HM TR V NHIU GI TR(4)

S dng tham chiu


void HinhTron(int r, int &dientich, int &chuvi) { dientich = 3.14 * r * r; chuvi = 2 * 3.14 * r; }

Khi gi hm phi truyn a ch


RutgonPS(r, dt, cv);

HM TO BN SAO (1) (copy constructor)

Hm to bn sao:
Sinhvien::Sinhvien() { Cout<<Ham tao\n; } Sinhvien::Sinhvien(Sinhvien&) { Cout<<Ham tao ban sao\n; }

HM TO BN SAO (2)
i s dng tham tr hoc khi hm tr v gi tr th mt bn sao ca i s s c to ra. Nu i s l i tng ca lp th hm to bn sao s c gi. Gi s c 2 hm
Sinhvien Ham1(Sinhvien sv); Sinhvien Ham2(Sinhvien *sv);

Khi hm 1 c gi, phi truyn i s dng tham tr nn hm to bn sao c gi Khi hm 2 c gi, truyn i s dng tham chiu, hm to bn sao khng c gi

CON TR & THAM CHIU

Qua cc v d phn tch, vic s dng con tr v tham chiu cho ta kt qu ging nhau Nn s dng tham chiu thay cho con tr nu c th Nu ta lm vic vi nhiu i tng, ch c cch duy nht l s dng con tr Hn na tham chiu khng th nhn gi tr null

THAM CHIU CON TR (Pointer Reference)

Tham chiu con tr: c dng khi mun thay i gi tr a ch trong con tr.
V d: void Doicho(Sinhvien *&sv1, Sinhvien *&sv2) { SinhVien *temp; temp = sv1; sv1 = sv2; sv2 = temp; }

Bi tp
1.Xy dng lp hnh ch nht vi cc thuc tnh sau: Xtt,Ytt, Xpd, Ypd- l ta tri-trn, phi-di ca mt hnh ch nht. Vi cc phng thc sau: Hm to, Hm hy, Phng thc t gi tr cho cc thuc tnh, v phng thc ly gi tr ca cc thuc tnh(dng tham chiu v con tr). Vit chng trnh minh ha. 2. Vit chng trnh xy dng lp im trong khng gian 2 chiu vi cc thuc tnh sau: honh x, tung y l cc s thc. Vi cc phng thc sau: hm to, hm hy, phng thc t gi tr cho x v y, phng thc ly gi tr x, phng thc ly gi tr y v phng thc ly c 2 gi tr x, y. Vit chng trnh minh ha.

You might also like