Trả về các tham chiếu

Một phần của tài liệu Mảng con trỏ và tham chiếu (Trang 28 - 32)

Một hàm có thể trả về một tham chiếu. Điều này có ích khi quá tải một số loại toán tử nào đó.

Một hàm cũng có thể được sử dụng ở bên trái của câu lệnh gán.

• Hàm trả về một tham chiếu.

Ví dụ 7.1

// A simple example of a function returning a reference. #include <iostream.h>

int &f(); // return a reference

int x; int main() {

f() = 100; // assign 100 to reference returned by f() cout << x << "\n";

return 0; }

// Return an int reference.

int &f()

{

return x; // returns a reference to x }

Bên trong hàm f(), câu lệnh return x không trả về giá trị của biến toàn cục, nhưng nó tự động trả về điạ chỉ của x dưới dạng tham chiếu.

• Hàm trả về một tham chiếu, phải cẩn thận khi đối tượng tham chiếu không ra ngoài phạm vi.

Ví dụ 7.2

// Return an int reference.

int &f()

{

int x; // x is now a local variable return x; // returns a reference to x }

Do x là biến cục bộ, sẽ ra khỏi phạm vi khi f() trả về, nghiã là tham chiếu được trả về bởi f() là vô dụng.

• Một ứng dụng của hàm trả về một tham chiếu dùng kiểm tra giới hạn biên của mảng.

Ví dụ 7.3

// A simple bounded array example. #include <iostream.h> #include <stdlib.h> class array { int size; char *p; public: array(int num); ~array() { delete [] p; }

char &put(int i);

char get(int i); };

array::array(int num) {

p = new char [num]; if(!p) {

cout << "Allocation error\n"; exit(1);

}

} (adsbygoogle = window.adsbygoogle || []).push({});

// Put something into the array.

char &array::put(int i)

{

if(i<0 || i>=size) {

cout << "Bounds error!!!\n"; exit(1);

}

return p[i]; // return reference to p[i] }

// Get something from the array. char array::get(int i)

{

if(i<0 || i>=size) {

cout << "Bounds error!!!\n"; exit(1);

}

return p[i]; // return character

} int main() { array a(10); a.put(3) = 'X'; a.put(2) = 'R';

cout << a.get(3) << a.get(2); cout << "\n";

// now generate run-time boundary error a.put(11) = '!';

return 0; }

Bài tập VII

1. Hãy viết chương trình tạo mảng an toàn hai chiều 2x3 các số nguyên. 2. Đoạn chương trình sau có đúng không ? Tại sao ?

int &f(); . . . int *x; x = f();

Một phần của tài liệu Mảng con trỏ và tham chiếu (Trang 28 - 32)