C++에서 참조 반환

C Eseo Chamjo Banhwan



C++에서는 포인터가 아닌 참조로 값이나 주소를 반환하는 기능을 제공합니다. 포인터 대신 참조를 사용하면 C++ 프로그램을 더 쉽게 읽고 관리할 수 있습니다. C++에서 참조와 포인터는 서로 밀접하게 관련되어 있습니다. 주요 차이점은 참조는 단지 다른 변수에 대한 대체 이름, '별칭'이지만 값 추가와 같은 작업에 포인터를 사용할 수 있다는 것입니다. 참조는 대체 이름이거나 원래 값의 중복이며 '&' 기호로 표시됩니다.

예시 1:

'iostream' 헤더 파일을 가져온 다음 'std' 네임스페이스를 활용합니다. 헤더 파일은 많은 함수가 정의되어 있으므로 C++ 코드로 가져옵니다. 그런 다음 함수 이름 'returnTheValue'에 '&' 기호를 배치하여 반환 참조 함수를 만듭니다.







이제 여기에 '값' 참조가 삽입됩니다. 그 아래에는 '&value' 참조를 사용하여 값과 주소를 인쇄합니다. 그런 다음 반환 참조를 배치하고 '값'을 배치합니다. 이제 여기에서 'main()'이 호출되고 '44' 값으로 'n1'을 초기화합니다. 그 아래에서는 'int& n2'가 'returnTheValue(n1)'로 초기화됩니다. 이제 'n1'의 값과 주소를 인쇄합니다. 그런 다음 'cout'을 활용하여 'n2'의 값과 'n2'의 주소를 인쇄합니다.



코드 1:



#include
네임스페이스 std 사용;
정수 & returnTheValue ( 정수 & )
{
시합 << '값 = ' << <<
<< ' 값의 주소는 '
<< & << 끝;
반품 값;
}
정수 메인 ( )
{
당신은 n1 = 44 ;
정수 & n2 = returnTheValue ( n1 ) ;
시합 << 'n1 = ' << n1 <<
<< ' n1의 주소는 '
<< & n1 << 끝;
시합 << 'n2 = ' << n2 <<
<< ' n2의 주소는 '
<< & n2 << 끝;
반품 0 ;
}


산출:





여기서 참조는 다음과 같이 다른 변수의 대체 이름일 뿐이라는 점을 알 수 있습니다. 값의 주소로 “n1”과 “n2”는 절대 변하지 않습니다.



예 2:

'iostream' 헤더 파일을 가져온 후 'std' 네임스페이스를 사용합니다. 다음으로 함수 이름 'MyReturnValueFunc'와 '&' 기호를 사용하여 반환 참조 함수를 만듭니다. 'v1' 변수에 대한 참조가 여기에 배치됩니다. 이 아래에 '&v1' 참조를 사용하여 값과 주소를 인쇄합니다. 다음으로 이 위치에 'return'과 'v1'을 활용하여 'return reference'를 삽입합니다. 여기서는 “main()”이 호출되고, “num_1”은 “19”의 값으로 초기화됩니다. 'int& num_2'의 초기화는 'MyReturnValueFunc(num_1)'을 사용하여 수행됩니다.

현재는 'num_1'의 값과 주소를 출력하고 'cout'을 사용하여 'num_2'의 값과 주소를 출력합니다. 이제 'MyReturnValueFunc'에 의해 여기에 반환된 주소를 활용하여 'num_1'의 값을 변경합니다. 이 함수는 'num_1'의 대체 이름이기도 한 'v1'의 대체 이름을 반환합니다. 따라서 값을 변경하고 '91'로 설정합니다. 여기서 별칭 역할을 하는 'MyReturnValueFunc(num_1)'에 '91'을 할당합니다. 그런 다음 값과 'num_1'의 주소를 다시 인쇄합니다.

코드 2:

#include
네임스페이스 std 사용;
정수 & MyReturnValueFunc ( 정수 & v1 )
{
시합 << 'v1의 값 = ' << v1 <<
<< ' v1 변수의 주소는 '
<< & v1 << 끝;
반품 v1;
}
정수 메인 ( )
{
정수 num_1 = 19 ;
정수 & num_2 = MyReturnValueFunc ( 숫자_1 ) ;
시합 << 'num_1의 값 = ' << 숫자_1 <<
<< ' num_1의 주소는 '
<< & 숫자_1 << 끝;
시합 << 'num_2의 값 = ' << num_2 <<
<< ' num_2의 주소는 '
<< & num_2 << 끝;
MyReturnValueFunc ( 숫자_1 ) = 91 ;
시합 << '이제, num_1의 값 = ' << 숫자_1 <<
<< 'num_1의 주소는 '
<< & 숫자_1 << 끝;
반품 0 ;
}


산출:

다음에서 설명하는 것처럼 'v1', 'num_1' 및 'num_2' 값의 주소가 일정하게 유지되므로 참조는 다른 변수에 대한 대체 이름일 뿐임을 알 수 있습니다.

예시 3:

'iostream' 헤더 파일을 가져오고 'std' 네임스페이스가 사용됩니다. 헤더 파일에는 수많은 함수가 지정되어 있으므로 이를 C++ 코드로 가져옵니다. 여기서는 참조를 반환하는 'int& my_ref'를 배치하는 'ReturnRefFun()' 함수를 만듭니다. 여기서는 'int& ReturnRefFun'이 참조 함수로 선언됩니다. 그런 다음 'my_ref' 변수의 값을 증가시킵니다. 그 아래에는 'my_ref'의 참조를 반환하는 'return'을 넣습니다.

그런 다음 여기에서 'main()' 메서드가 호출됩니다. 그런 다음 'first_value' 변수를 '21'로 초기화합니다. 아래에서는 'ReturnRefFun' 함수에 'first_value'를 배치하여 참조 복사본을 반환하고 이를 'copied_value' 변수에 저장합니다. 그런 다음 'cout'을 활용하여 'first_value'와 'copied_value'를 모두 인쇄합니다. 그 아래에 'copied_value++'를 배치하여 'copied_value' 변수를 증가시킵니다. 그런 다음 'copied_value'를 증가시킨 후 'cout'을 사용하여 'first_value'를 인쇄합니다. 그런 다음 'ReturnRefFun(first_value)'을 사용하여 'int& ref_value' 변수를 초기화하여 참조를 반환합니다.

그런 다음 복사한 'my_ref' 변수의 값을 인쇄합니다. 그런 다음 “first_value” 변수의 값을 인쇄합니다. 그 아래에 'ref_value++'를 넣어 'ref_value'의 값을 증가시킵니다. 그 아래에는 'cout'을 사용하여 'ref_value'의 증가된 값과 'first_value' 변수를 인쇄합니다. 'ref_value'가 변경되면 'first_value'도 변경됩니다.

코드 3:

#include
네임스페이스 std 사용;
정수 & ReturnRefFun ( 정수 & my_ref ) {
my_ref++;
반품 my_ref;
}
정수 메인 ( ) {
정수 첫 번째_값 = 이십 일 ;
정수 복사_값 =ReturnRefFun ( 첫 번째_값 ) ;
시합 << '첫 번째 값은 : ' << 첫 번째_값 << 끝;
시합 << '복사된 값은 다음과 같습니다: ' << 복사_값 << 끝;
복사_값++;
시합 << '복사된_값이 증가합니다: ' << 복사_값 << 끝;
시합 << '첫 번째 값: ' << 첫 번째_값 << 끝;
정수 & 심판_값 =ReturnRefFun ( 첫 번째_값 ) ;
시합 << '참조 복사 값: ' << 심판_값 << 끝;
시합 << '첫 번째 값: ' << 첫 번째_값 << 끝;
ref_value++;
시합 << '기준값이 증가합니다: ' << 심판_값 << 끝;
시합 << '첫 번째 값: ' << 첫 번째_값 << 끝;
반품 0 ;
}


산출:

다음은 '반환 참조' 기술을 활용한 이전 코드의 결과입니다. 이 예에서는 참조 변수의 복사본을 반환하는 것과 참조 변수 자체를 반환하는 것의 차이점을 보여줍니다.

예시 4:

여기서는 참조 변수를 반환하는 참조 함수로 “int& rByRef”를 선언했습니다. 'int& rByref()' 함수에 'int& data'를 전달합니다. 여기서는 'data' 변수의 주소를 인쇄한 다음 이 아래의 반환 참조를 활용합니다. 이제 “main()” 메소드를 호출한 후 “x_var” 변수를 초기화합니다. 그런 다음 'cout'에 '&x_var'를 넣어서 'x_var'의 주소를 여기에 인쇄합니다.

그 아래에는 'int& y_var'에 'rByref(x_var)'를 할당하여 참조 변수를 활용합니다. 그런 다음 해당 '&y_var' 참조 변수의 주소도 인쇄합니다. 아래에서는 'x_var' 변수를 'z_var' 변수에 복사하고 복사된 변수의 주소인 '&z_var'도 인쇄합니다. 그런 다음 'rByref()' 함수를 호출하고 'x_var' 변수를 그 안에 매개변수로 전달하고 이 변수에 '93'을 할당합니다. 또한 'cout'에 '&x_var'를 넣어 'x_var'의 주소를 다시 렌더링합니다.

코드 4:

#include
네임스페이스 std 사용;
정수 & rByref ( 정수 & 데이터 )
{
시합 << '데이터 주소: ' << & 데이터 << 끝;
반품 데이터;
}
정수 메인 ( )
{
정수 x_var = 42 ;
시합 << 'x_var 주소: ' << & x_var << 끝;
정수 & y_var = rByref ( x_var ) ;
시합 << 'y_var의 주소: ' << & y_var << 끝;
int z_var = rByref ( x_var ) ;
시합 << 'z_var의 주소: ' << & z_var << 끝;
rByref ( x_var ) = 93 ;
시합 << 'x_var 주소: ' << & x_var << 끝;
반품 0 ;
}


산출:

결과를 보면 복제된 변수의 주소 'z_var'가 원래 변수 'x_var'가 참조하는 다른 모든 위치와 다르다는 것이 분명해집니다.

결론

이 튜토리얼에서는 '반환 참조' 개념을 자세히 살펴봅니다. 우리는 '반환 참조'가 C++ 프로그래밍의 '포인터'와 유사하다는 것을 배웠습니다. 우리는 어떤 함수가 참조를 반환하는지 나타내기 위해 함수의 반환 유형과 함께 '&' 기호를 활용해야 한다고 논의했습니다. 우리는 몇 가지 예와 그 결과를 설명하고 이 튜토리얼에서 이 개념을 이해했습니다.