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... Tái định nghĩa hàm thành viên• Trong 1 lớp, có thể định nghĩa các hàm thành viên trùng tê
Trang 1HÀM THÀNH VIÊN
Chương 4
1
Trang 2Nộ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
• Con trỏ *this
• Hàm thành viên hằng
2
Trang 3Tái định nghĩa hàm thành 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ố
3
Tính đa hình của lập trình hướng đối tượng
Trang 4Dù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
4
Trang 5Hà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
Trang 6Truyền đối tượng như đối số của 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
Trang 7• 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
7
Truyền đối tượng như đối số của hàm
Trang 8• 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
8
Truyền đối tượng như đối số của hàm
Trang 9Trị 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
9
Trang 10Trị 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
Trang 11Trị 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
11
Trang 12Con 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
12
class ViDu2 {
int a;
public:
{
cout << “Dia chi doi tuong : “ <<this<< endl ;
cout << “Dia chi du lieu
a : “ <<&a<< endl ;
} };
class Diem {
public :
Diem()
{ x=y=0; }
{
this ->x = x;
this ->y = y;
}
… };
Trang 13Hà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
13
class Diem {
int x,y;
public:
Diem();
};
… … …
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