- from alpha to omeg a
1. int & ref; // lỗi không khởi tạo ngay khi khai báo
Mọi thay đổi về trên tham chiếu cũng gây ra những thay đổi tương tự trên biến vì bản chất
nó là hai cái tên cho cùng một biến (giống như thằng Bờm với con của bố thằng Bờm là
một thằng, giả thiết bố thằng Bờm chỉ đẻ được một thằng. Vì vậy ta cũng có thể dùng tham chiếu để truyền đối số cho hàm với tác dụng giống hệt con trỏ. Bây giờ ta sẽ cải tiến lại hàm swap bên trên bằng cách dùng tham chiếu.
C++ Code:
1. #include <iostream>
2. using namespace std;
32 Hướng dẫn lập trình hướng đối tượng với C++_ first_pace Hướng dẫn lập trình hướng đối tượng với C++_ first_pace
4. // hàm swap
5. void swap(int& a, int& b){6. int temp; 6. int temp; 7. temp=a; 8. a=b; 9. b=temp; 10.} 11. 12.int main(){ 13.… 14.// gọi hàm swap 15.swap(x,y); 16.… 17.}
Nhận xét: về cơ bản tác dụng của việc truyền theo tham chiếu và truyền theo con trỏ là hòan toàn như nhau, tuy nhiên dùng tham chiếu sẽ tốt hơn vì nó làm cho “giao diện” của hàm thân thiện hơn. Hãy so sánh việc truyền tham số của hai cách:
C++ Code:
1. // theo con trỏ
2. swap(&x, &y);3. // theo tham chiếu 3. // theo tham chiếu 4. swap(x, y);
Rõ ràng thằng dưới nhìn “thân thiện” hơn thằng trên (tự dưng để cái dấu & ở trước trông nó chướng mắt .Hơn nữa tham chiếu đã gắn với biến nào rồi thì cố định luôn, không thay đổi được, còn con trỏ không thích trỏ biến này nữa thì có thể trỏ sang biến khác, nên nếu lỡ tay mà ta cho nó “trỏ lung tung” thì không biết đằng nào mà lần.
Lợi ích của việc truyền tham chiếu hằng (const references)
Bây giờ ta lại đặt ra vấn đề: liệu có cách nào tận dụng được tính an toàn bảo mật của truyền theo tham trị nhưng lại tận dụng được lợi thế về chi phí bộ nhớ và thời gian như truyền theo tham chiếu không? Câu trả lời đói là dùng tham chiếu hằng. Chúng ta sẽ xem chương trình sau:
C++ Code:
1. #include <iostream>
2. using namespace std;
3.