Nội dung
• Tái định nghĩa, ðối số mặc nhiên
Chương 4
• Hàm inline
HÀM THÀNH VIÊN
• Truyền đối tượng như đối số của hàm.
• Trị trả về của hàm là đối tượng
• Con trỏ *this
• Hàm thành viên hằng
1
2
Tái định nghĩa hàm thành viên
Dùng đối số mặc nhiê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ố.
• 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.
Tính ña hình của lập trình hướng ñối tượng
3
4
Hàm inline
Truyền đối tượng như đối số của hàm
• Truyền qua giá trị
• 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.
– 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ố.
5
Truyền ñối tượng như ñối số của hàm
6
Truyền ñối tượng như đối số của hàm
• Truyền qua tham chiếu
• Truyền qua địa chỉ
– Tương tự như 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.
– ðị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.
7
8
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 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ột đố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ụ.
9
10
Trị trả về của hàm là đối tượng
Con trỏ *this
• 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 tồn cục hay nội dung
một con trỏ ñã ñược cấp vùng nhớ trong hàm.
• 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.
11
class Diem {
int x, y;
public:
Diem()
{ x=y=0; }
Diem(int x, int y)
{
this->x = x;
this->y = y;
}
…
};
class ViDu2 {
int a;
public:
ViDu2(int x) { a= x; }
void InDiaChi()
{
cout<<“Dia chi doi
tuong : “<
cout<< “Dia chi du lieu
a : “<<&a<
}
};
12
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ệu của ñố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);
Sai vì
c.Hien();
Doi(int,int)
c.Doi(10,20); khơng là hàm
}
13
hằng