Trả về tham chiếu trong C++

Tra Ve Tham Chieu Trong C



C++ cung cấp khả năng trả về một giá trị hoặc một địa chỉ bằng tham chiếu của nó thay vì bằng con trỏ. Sử dụng tham chiếu thay vì con trỏ có thể làm cho chương trình C++ dễ đọc và quản lý hơn. Trong C++, tham chiếu và con trỏ có liên quan chặt chẽ với nhau. Điểm khác biệt chính là mặc dù tham chiếu chỉ là tên thay thế, “bí danh” cho một biến khác, nhưng con trỏ có thể được sử dụng trong các hoạt động như cộng giá trị. Tham chiếu là tên thay thế hoặc trùng lặp với giá trị ban đầu và được biểu thị bằng ký hiệu “&”.

Ví dụ 1:

Chúng tôi nhập tệp tiêu đề “iostream” và sau đó sử dụng không gian tên “std”. Các tệp tiêu đề được nhập bằng mã C++ khi nhiều hàm được xác định. Sau đó, chúng ta tạo hàm tham chiếu trả về bằng cách đặt ký hiệu “&” với tên hàm “returnTheValue”.







Ở đây, tham chiếu “giá trị” hiện đã được chèn vào. Bên dưới phần này, chúng tôi in giá trị và địa chỉ có tham chiếu “&value”. Sau đó, chúng ta đặt tham chiếu trả về và đặt “giá trị”. Bây giờ, “main()” được gọi ở đây và chúng ta khởi tạo “n1” với giá trị “44”. Bên dưới này, “int& n2” được khởi tạo bằng “returnTheValue(n1)”. Bây giờ, chúng ta in giá trị của “n1” cũng như địa chỉ của nó. Sau đó, chúng ta in giá trị của “n2” cũng như địa chỉ của “n2” bằng cách sử dụng “cout”.



Mã 1:



#include
sử dụng không gian tên std;
int & returnTheValue ( int & giá trị )
{
cout << 'Giá trị =' << giá trị << kết thúc
<< ' Địa chỉ của giá trị là '
<< & giá trị << cuối cùng;
trở lại giá trị;
}
int chính ( )
{
bạn n1 = 44 ;
int & n2 = returnTheValue ( n1 ) ;
cout << 'n1 =' << n1 << kết thúc
<< 'Địa chỉ của n1 là'
<< & n1 << cuối cùng;
cout << 'n2 =' << n2 << kết thúc
<< 'Địa chỉ của n2 là'
<< & n2 << cuối cùng;
trở lại 0 ;
}


Đầu ra:





Ở đây, chúng ta có thể lưu ý rằng tham chiếu chỉ là tên thay thế của một biến khác như minh họa dưới đây. Là địa chỉ của giá trị, “n1” và “n2” không bao giờ thay đổi.



Ví dụ 2:

Chúng tôi sử dụng không gian tên “std” sau khi nhập tệp tiêu đề “iostream”. Tiếp theo, chúng ta sử dụng tên hàm “MyReturnValueFunc” và ký hiệu “&” để xây dựng hàm tham chiếu trả về. Tham chiếu đến biến “v1” được đặt ở đây. Chúng tôi in giá trị và địa chỉ có tham chiếu “&v1” bên dưới giá trị này. Tiếp theo, chúng tôi chèn “tham chiếu trả lại” bằng cách sử dụng “return” và “v1” ở vị trí này. Ở đây, “main()” được gọi và “num_1” được khởi tạo với giá trị là “19”. Việc khởi tạo “int& num_2” được thực hiện với “MyReturnValueFunc(num_1)”.

Hiện tại, chúng tôi in giá trị và địa chỉ của “num_1” và sử dụng “cout”, chúng tôi in giá trị và địa chỉ của “num_2”. Bây giờ chúng tôi thay đổi giá trị của “num_1” bằng cách sử dụng địa chỉ được trả về ở đây bởi “MyReturnValueFunc”. Hàm này trả về tên thay thế của “v1” cũng là tên thay thế của “num_1”. Vì vậy, chúng tôi thay đổi giá trị của nó và đặt nó thành “91”. Chúng tôi gán “91” cho “MyReturnValueFunc(num_1)” hoạt động như bí danh ở đây. Sau đó, chúng ta in lại giá trị và địa chỉ của “num_1”.

Mã 2:

#include
sử dụng không gian tên std;
int & MyReturnValueFunc ( int & v1 )
{
cout << 'Giá trị của v1 =' << v1 << kết thúc
<< ' Địa chỉ của biến v1 là '
<< & v1 << cuối cùng;
trở lại v1;
}
int chính ( )
{
int num_1 = 19 ;
int & num_2 = MyReturnValueFunc ( số_1 ) ;
cout << 'Giá trị của num_1 =' << số_1 << kết thúc
<< ' Địa chỉ của num_1 là '
<< & số_1 << cuối cùng;
cout << 'Giá trị của num_2 =' << số_2 << kết thúc
<< ' Địa chỉ của num_2 là '
<< & số_2 << cuối cùng;
MyReturnValueFunc ( số_1 ) = 91 ;
cout << 'Bây giờ, giá trị của num_1 =' << số_1 << kết thúc
<< 'Địa chỉ của số_1 là'
<< & số_1 << cuối cùng;
trở lại 0 ;
}


Đầu ra:

Như được minh họa ở phần sau, chúng ta có thể thấy rằng tham chiếu chỉ là tên thay thế cho một biến khác vì địa chỉ của các giá trị “v1”, “num_1” và “num_2” không đổi:

Ví dụ 3:

Tệp tiêu đề “iostream” được nhập và không gian tên “std” được sử dụng. Vì có nhiều hàm được chỉ định trong tệp tiêu đề nên chúng tôi nhập chúng vào mã C++. Ở đây, chúng ta tạo một hàm “ReturnRefFun()” trong đó chúng ta đặt “int& my_ref” để trả về tham chiếu. “int& ReturnRefFun” được khai báo ở đây là hàm tham chiếu. Sau đó, chúng tôi tăng giá trị của biến “my_ref”. Bên dưới phần này, chúng ta đặt “return” để trả về tham chiếu của “my_ref”.

Sau đó, phương thức “main()” được gọi ở đây. Sau đó, chúng ta khởi tạo biến “first_value” bằng “21”. Bên dưới phần này, chúng tôi trả về bản sao của tham chiếu bằng cách đặt “first_value” vào hàm “ReturnRefFun” và lưu nó vào biến “copied_value”. Sau đó, chúng tôi in cả “first_value” cũng như “copy_value” bằng cách sử dụng “cout”. Bên dưới điều này, chúng tôi tăng biến “copied_value” bằng cách đặt “copied_value++”. Sau đó, chúng tôi in “copied_value” sau khi tăng nó và “first_value” bằng cách sử dụng “cout”. Sau đó, chúng ta trả về tham chiếu với sự trợ giúp khởi tạo biến “int& ref_value” bằng “ReturnRefFun(first_value)”.

Sau đó, chúng tôi in giá trị của biến “my_ref” mà chúng tôi đã sao chép. Sau đó, chúng ta in giá trị của biến “first_value”. Bên dưới phần này, chúng tôi tăng giá trị của “ref_value” bằng cách đặt “ref_value++”. Bên dưới phần này, chúng tôi in giá trị tăng dần của “ref_value” và cả biến “first_value” với sự trợ giúp của “cout”. Khi “ref_value” được thay đổi, “first_value” cũng sẽ thay đổi.

Mã 3:

#include
sử dụng không gian tên std;
int & Trả lạiRefVui vẻ ( int & my_ref ) {
my_ref++;
trở lại my_ref;
}
int chính ( ) {
int giá trị đầu tiên = hai mươi mốt ;
int giá trị được sao chép =ReturnRefFun ( giá trị đầu tiên ) ;
cout << 'Giá trị đầu tiên là:' << giá trị đầu tiên << cuối cùng;
cout << 'Giá trị được sao chép là:' << giá trị được sao chép << cuối cùng;
đã sao chép_value++;
cout << 'Copy_value được tăng lên: ' << giá trị được sao chép << cuối cùng;
cout << 'Giá trị đầu tiên:' << giá trị đầu tiên << cuối cùng;
int & ref_value =ReturnRefFun ( giá trị đầu tiên ) ;
cout << 'Giá trị được sao chép tham chiếu:' << ref_value << cuối cùng;
cout << 'Giá trị đầu tiên:' << giá trị đầu tiên << cuối cùng;
ref_value++;
cout << 'Giá trị tham chiếu được tăng lên:' << ref_value << cuối cùng;
cout << 'Giá trị đầu tiên:' << giá trị đầu tiên << cuối cùng;
trở lại 0 ;
}


Đầu ra:

Đây là kết quả của đoạn mã trước mà chúng tôi đã sử dụng kỹ thuật 'tham chiếu trả về'. Ví dụ này cho thấy sự khác biệt giữa việc trả về một bản sao của biến tham chiếu và trả về chính biến tham chiếu đó.

Ví dụ 4:

Ở đây, “int& rByRef” được khai báo là hàm tham chiếu trả về biến tham chiếu. Chúng ta chuyển “int& data” cho hàm “int& rByref()” này. Ở đây, chúng ta in địa chỉ của biến “data” và sau đó sử dụng tham chiếu trả về bên dưới biến này. Bây giờ, chúng ta khởi tạo biến “x_var” sau khi gọi phương thức “main()”. Sau đó, chúng ta in địa chỉ của “x_var” tại đây bằng cách đặt “&x_var” vào “cout”.

Bên dưới điều này, chúng tôi sử dụng biến tham chiếu bằng cách gán “rByref(x_var)” cho “int& y_var”. Sau đó, chúng tôi cũng in địa chỉ của biến tham chiếu “&y_var” đó. Bên dưới phần này, chúng ta sao chép biến “x_var” vào biến “z_var” và cũng in địa chỉ của biến được sao chép này là “&z_var”. Sau đó, chúng ta gọi hàm “rByref()”, chuyển biến “x_var” làm tham số bên trong nó và gán “93” cho biến này. Chúng tôi cũng hiển thị lại địa chỉ của “x_var” bằng cách đặt “&x_var” vào “cout”.

Mã 4:

#include
sử dụng không gian tên std;
int & rByref ( int & dữ liệu )
{
cout << 'Địa chỉ của dữ liệu:' << & dữ liệu << cuối cùng;
trở lại dữ liệu;
}
int chính ( )
{
int x_var = 42 ;
cout << 'Địa chỉ của x_var:' << & x_var << cuối cùng;
int & y_var = rByref ( x_var ) ;
cout << 'Địa chỉ của y_var:' << & y_var << cuối cùng;
int z_var = rByref ( x_var ) ;
cout << 'Địa chỉ của z_var:' << & z_var << cuối cùng;
rByref ( x_var ) = 93 ;
cout << 'Địa chỉ của x_var:' << & x_var << cuối cùng;
trở lại 0 ;
}


Đầu ra:

Kết quả cho thấy rõ rằng địa chỉ của biến nhân bản, “z_var”, khác với tất cả các vị trí khác mà biến ban đầu, “x_var”, tham chiếu.

Phần kết luận

Khái niệm “tham chiếu trả lại” được khám phá chi tiết trong hướng dẫn này. Chúng ta đã biết rằng “tham chiếu trả về” tương tự như “con trỏ” trong lập trình C++. Chúng ta đã thảo luận rằng để chỉ ra hàm nào trả về một tham chiếu, ký hiệu “&” cần được sử dụng cùng với kiểu trả về của hàm. Chúng tôi đã minh họa một số ví dụ và kết quả của chúng cũng như hiểu khái niệm này trong hướng dẫn này.