
HÀM THÀNH VIÊNHÀM THÀNH VIÊN
Chương 4
Ni dungNi dung
• Tái ñnh nghĩa, ði s mc nhiên
• Hàm inline
• Truyn ñi tưng như ñi s ca hàm.
•
Tr tr v ca hàm là ñi tưng
•
Tr tr v ca hàm là ñi tưng
• Con tr *this
• Hàm thành viên hng
TáiTái ñnhñnh nghĩanghĩa hàmhàm thànhthành viênviên
• Trong 1 lp, có th ñnh nghĩa các hàm thành viên trùng tên,
nhưng các hàm này phi khác nhau v tham s.
Tính ña hình ca lp trình hưng ñi tưng
Dùng ñi s mc nhiênDùng ñi s mc nhiên
• Có th dùng ñi s mc nhiên cho hàm thành viên.
• Tt c ñi s mc nhiên ñu phi nm cui hàm.

Hàm inlineHàm inline
• Có 2 cách khai báo hàm inline :
– Thêm t khóa inline vào trưc hàm thành viên.
–ðnh nghĩa hàm ngay bên trong khai báo lp.
TruynTruynñiñi tưngtưng nhưnhư ñiñi sscaca
hàmhàm
•Truyn qua giá tr
– Tham sca hàm thành viên có thcó kiu bt kỳ.
– Mtñi tưng có th ñưc truyn theo tham s.
•Truyn qua đa ch
–Tit kim ô nhcho chương trình (hơn truyn qua giá tr).
–Có thlàm thay đi giá trca đi tưng truyn vào.
TruynTruynñiñi tưngtưng nhưnhư ñiñi sscaca
hàmhàm
•Truyn qua tham chiu
– Tương t như truyn qua ña ch.
–ðnh nghĩa hàm s ñơn gin hơn (như truyn qua giá tr)
– Cũng có th làm thay ñi giá tr ca ñi tưng truyn vào.
TruynTruynñiñi tưngtưng nhưnhư ñiñi sscaca
hàmhàm

Tr tr v ca hàm là ñi tưngTr tr v ca hàm là ñi tưng
•Tr tr v truyn qua giá tr
– Tr tr v ca hàm thành viên có th có kiu bt kỳ.
– Mt hàm có th có tr tr v là mt ñi tưng.
Tr tr v ca hàm là ñi tưngTr tr v ca hàm là ñi tưng
•Tr tr v truyn qua ña ch
– Tránh lãng phí b nh và thi gian gi hàm.
– S d ng phi c!n thn vì có th gây ra hiu "ng ph .
Tr tr v ca hàm là ñi tưngTr tr v ca hàm là ñi tưng
•Tr tr v truyn qua tham chiu
– Tương t như truyn qua ña ch
–ða s dùng ñ tr v mt ñi tưng toàn c c hay ni dung
mt con tr ñã ñưc cp vùng nh trong hàm.
Con tr *thisCon tr *this
• Lưu ña ch ca chính ñi tưng ñang xét.
• Mun ly giá tr ca chính ñi tưng: dùng *this.
• Thuc tính truy cp là private.
class ViDu2 {
int
a;
class Diem {
int
x, y;
int
a;
public:
ViDu2(int x) { a= x; }
void InDiaChi()
{
cout<<“Dia chi doi
tuong : “<<this<<endl;
cout<< “Dia chi du lieu
a : “<<&a<<endl;
}
};
int
x, y;
public:
Diem()
{ x=y=0; }
Diem(int x, int y)
{
this->x = x;
this->y = y;
}
…
};

Hàm thành viên hngHàm thành viên hng
•Hng d liu: không thay ñi giá tr trong khi thc thi.
•Hng ñi tưng: không thay ñi giá tr các thành ph#n d$ liu
trong ñi tưng.
•Hàm thành viên hng:
– Có th thao tác trên hng ñi tưng.
–Không làm thay ñi giá tr d liuca ñi tưng.
class Diem {
int x,y;
public:
Diem();
void Hien() const;
void Doi(int, int);
};
… … …
void main() {
Diem a;
const Diem c;
a.Hien();
a.Doi(5,6);
c.Hien();
c.Doi(10,20);
}
Sai vì
Doi(int,int)
không là hàm
hng