– Có thể làm thay đổi giá trị của đối tượng truyền vào.. – ðịnh nghĩa hàm sẽñơn giản hơn như truyền qua giá trị – Cũng có thể làm thay ñổi giá trị của ñối tượng truyền vào... – Một hàm c
Trang 1HÀM THÀNH VIÊN
Ch ươ ng 4
1
N ộ i dung
N ộ i dung
• Tái ñị nh ngh ĩ a, ðố i s ố m ặ c nhiên
• Hàm inline
• Truy ề n ñố i t ượ ng nh ư ñố i s ố c ủ a hàm.
• Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
• Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
• Con tr ỏ *this
• Hàm thành viên h ằ ng
2
Tái ñị ñị nh nh ngh ngh ĩ ĩ a a hàm hàm thành thành viên viên
• Trong 1 lớp, 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 phải khác nhau v ề tham s ố
Tính ña hìnhcủa lập trình hướng ñối tượng
Dùng ñố i s ố m ặ c nhiên Dùng ñố i s ố m ặ c nhiên
• Có th ể dùng ñố i s ố m ặ c nhiên cho hàm thành viên.
• T ấ t c ả ñố i s ố m ặ c nhiên ñề u ph ả i n ằ m cu ố i hàm.
Trang 2Hà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 l ớ p.
5
Truy ề n Truy ề n ñố ñố i i t t ượ ượ ng ng nh nh ư ư ñố ñố i i s s ố ố c c ủ ủ a a hàm hàm
• Truy ề n qua giá tr ị
– Tham s ố c ủ a hàm thành viên có th ể có ki ể u b ấ t k ỳ – M ộ t ñố i t ượ ng có th ể ñượ c truy ề n theo tham s ố
6
• Truyền qua địa chỉ
– Tiết kiệm ô nhớ cho chương trình (hơn truyền qua giá trị).
– Có thể làm thay đổi giá trị của đối tượng truyền vào.
Truy ề n
Truy ề n ñố ñố i i t t ượ ượ ng ng nh nh ư ư ñố ñố i i s s ố ố c c ủ ủ a a hàm hàm
• Truy ề n qua tham chi ế u
– Tương tự như truyền qua ñịa chỉ – ðịnh nghĩa hàm sẽñơn giản hơn (như truyền qua giá trị) – Cũng có thể làm thay ñổi giá trị của ñối tượng truyền vào
Truy ề n Truy ề n ñố ñố i i t t ượ ượ ng ng nh nh ư ư ñố ñố i i s s ố ố c c ủ ủ a a hàm hàm
Trang 3Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
• Tr ị tr ả v ề truy ề n qua giá tr ị
– Trị trả về của hàm thành viên có thể có kiểu bất kỳ
– Một hàm có thể có trị trả về là mộ ñối tượng
9
Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
• Tr ị tr ả v ề truy ề n qua ñị a ch ỉ
– Tránh lãng phí bộ nhớ và thời gian gọi hàm
– Sử dụng phải cẩn thận vì có thể gây ra hiệu ứng phụ
10
Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
Tr ị tr ả v ề c ủ a hàm là ñố i t ượ ng
• Tr ị tr ả v ề truy ề n qua tham chi ế u
– Tương tự như truyền qua ñịa chỉ
– ða số dùng ñể trả về một ñối tượng toàn cục hay nội dung
một con trỏñã ñược cấp vùng nhớ trong hàm
Con tr ỏ *this Con tr ỏ *this
• Lưu ñịa chỉ của chính ñối tượng ñang xét
• Muốn lấy giá trị của chính ñối tượng: dùng *this
• Thuộc tính truy cập là private
class ViDu2 {
int a;
class Diem {
int x, y; int a;
public:
int x, y;
public :
Trang 4Hàm thành viên h ằ ng
Hàm thành viên h ằ ng
• H ằ ng d ữ li ệ u: không thay ñổi giá trị trong khi thực thi
• H ằ ng ñố i t ượ ng: không thay ñổi giá trị các thành phần dữ liệu trong ñối tượng
• Hàm thành viên h ằ ng:
– Có thể thao tác trên hằng ñối tượng
– Không làm thay ñổ i giá tr ị d ữ li ệ ucủa ñối tượng
13
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
h ằ ng