<< Chapter < Page Chapter >> Page >

Ví dụ 2.13: Mọi thao tác trên trên bí danh chính là thao tác trên biến gốc của nó.

#include<iostream.h>

int main()

{

   int X = 3;

   int&Y = X; //Y la bí danh của X

   int Z = 100;

   cout<<"X="<<X<<endl<<"Y="<<Y<<endl;

   Y *= 3;

   cout<<"X="<<X<<endl<<"Y="<<Y<<endl;

   Y = Z;

   cout<<"X="<<X<<endl<<"Y="<<Y<<endl;

   return 0;

}

Chúng ta c hạy ví dụ 2.13 , kết quả ở hình 2.16

Hình 2.16: Kết quả của ví dụ 2.13

Ví dụ 2.14: Lấy địa chỉ của biến tham chiếu

#include<iostream.h>

int main()

{

   int X = 3;

   int&Y = X; //Y la bí danh của X

   cout<<"Dia chi cua X = "<<&X<<endl;

   cout<<"Dia chi cua bi danh Y= "<<&Y<<endl;

   return 0;

}

Chúng ta chạy ví dụ 2.14 , kết quả ở hình 2.17

Hình 2.17: Kết quả của ví dụ 2.14

Chúng ta có thể tạo ra biến tham chiếu với việc khởi động là một hằng, chẳng hạn như đoạn mã sau :

int&Ref = 45;

Trong trường hợp này, trình biên dịch tạo ra một biến tạm thời chứa trị hằng và biến tham chiếu chính là bí danh của biến tạm thời này. Điều này gọi là tham chiếu độc lập (independent reference).

Các hàm có thể trả về một tham chiếu, nhưng điều này rất nguy hiểm. Khi hàm trả về một tham chiếu tới một biến cục bộ của hàm thì biến này phải được khai báo là static, ngược lại tham chiếu tới nó thì khi hàm kết thúc biến cục bộ này sẽ bị bỏ qua. Chẳng hạn như đoạn chương trình sau:

int&MyFunc()

{

static int X = 200; //Nếu không khai báo là static thì điều này rất nguy hiểm.

return X;

}

Khi một hàm trả về một tham chiếu, chúng ta có thể gọi hàm ở phía bên trái của một phép gán.

Ví dụ 2.15:

1: #include<iostream.h>

2:

3: int X = 4;

4: //prototype

5: int&MyFunc();

6:

7: int main()

8: {

9:     cout<<"X="<<X<<endl;

10:    cout<<"X="<<MyFunc()<<endl;

11:    MyFunc() = 20; //Nghĩa là X = 20

12:    cout<<"X="<<X<<endl;

13:    return 0;

14: }

15:

16: int&MyFunc()

17: {

18:    return X;

19: }

Chúng ta chạy ví dụ 2.15 , kết quả ở hình 2.18

Hình 2.18: Kết quả của ví dụ 2.15

Chú ý:

Mặc dù biến tham chiếu trông giống như là biến con trỏ nhưng chúng không thể là biến con trỏ do đó chúng không thể được dùng cấp phát động.

Chúng ta không thể khai báo một biến tham chiếu chỉ đến biến tham chiếu hoặc biến con trỏ chỉ đến biến tham chiếu. Tuy nhiên chúng ta có thể khai báo một biến tham chiếu về biến con trỏ như đoạn mã sau:

int X;

int *P =&X;

int *&Ref = P;

Phép đa năng hóa (overloading)

Với ngôn ngữ C++, chúng ta có thể đa năng hóa các hàm và các toán tử (operator). Đa năng hóa là phương pháp cung cấp nhiều hơn một định nghĩa cho tên hàm đã cho trong cùng một phạm vi. Trình biên dịch sẽ lựa chọn phiên bản thích hợp của hàm hay toán tử dựa trên các tham số mà nó được gọi.

Đa năng hóa các hàm (functions overloading)

Trong ngôn ngữ C cũng như mọi ngôn ngữ máy tính khác, mỗi hàm đều phải có một tên phân biệt. Đôi khi đây là một điều phiền toái. Chẳng hạn như trong ngôn ngữ C, có rất nhiều hàm trả về trị tuyệt đối của một tham số là số, vì cần thiết phải có tên phân biệt nên C phải có hàm riêng cho mỗi kiểu dữ liệu số, do vậy chúng ta có tới ba hàm khác nhau để trả về trị tuyệt đối của một tham số:

int abs(int i);

long labs(long l);

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Co nuoi. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10760/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Co nuoi' conversation and receive update notifications?

Ask