Врати референцу у Ц++

Vrati Referencu U C



Ц++ пружа могућност враћања вредности или адресе преко њене референце, а не показивача. Коришћење референци уместо показивача може учинити Ц++ програм једноставнијим за читање и управљање. У Ц++, референце и показивачи су уско повезани једни са другима. Основна разлика је у томе што иако су референце само алтернативно име, „псеудоним“ за другу променљиву, показивачи се могу користити у операцијама као што је додавање вредности. Референца је алтернативни назив или дупликат оригиналне вредности и означена је симболом „&“.

Пример 1:

Увозимо датотеку заглавља „иостреам“, а затим користимо „стд“ именски простор. Датотеке заглавља се увозе у Ц++ кодовима пошто су многе функције дефинисане. Затим креирамо повратну референтну функцију постављањем симбола „&“ са именом функције, „ретурнТхеВалуе“.







Овде је сада уметнута референца „вредност“. Испод овога штампамо вредност и адресу са референцом „&валуе“. Затим постављамо повратну референцу и постављамо „вредност“. Сада се овде позива „маин()“ и ми иницијализујемо „н1“ са вредношћу „44“. Испод овога, „инт& н2“ се иницијализује са „ретурнТхеВалуе(н1)“. Сада штампамо вредност „н1“ као и његову адресу. Затим штампамо вредност „н2“ као и адресу „н2“ користећи „цоут“.



Код 1:



#инцлуде <иостреам>
користећи простор имена стд;
инт & ретурнТхеВалуе ( инт & вредност )
{
цоут << 'Вредност = ' << вредност << ендл
<< „Адреса вредности је“
<< & вредност << ендл;
повратак вредност;
}
инт маин ( )
{
ти н1 = 44 ;
инт & н2 = ретурнТхеВалуе ( н1 ) ;
цоут << 'н1 = ' << н1 << ендл
<< 'Адреса н1 је'
<< & н1 << ендл;
цоут << 'н2 = ' << н2 << ендл
<< 'Адреса н2 је'
<< & н2 << ендл;
повратак 0 ;
}


Излаз:





Овде можемо приметити да је референца само алтернативно име друге променљиве као што је приказано у наставку. Као адреса вредности, „н1“ и „н2“ се никада не мењају.



Пример 2:

Користимо „стд“ именски простор након увоза „иостреам“ датотеке заглавља. Затим користимо назив функције „МиРетурнВалуеФунц“ и симбол „&“ да бисмо направили повратну референтну функцију. Овде се налази референца на променљиву „в1“. Штампамо вредност и адресу са референцом „&в1“ испод. Затим убацујемо „повратну референцу“ користећи „ретурн“ и „в1“ на овој локацији. Овде се позива „маин()“, а „нум_1“ се иницијализује са вредношћу „19“. Иницијализација „инт& нум_2“ се врши помоћу „МиРетурнВалуеФунц(нум_1)“.

Тренутно штампамо вредност и адресу „нум_1“ и, користећи „цоут“, штампамо вредност и адресу „нум_2“. Сада мењамо вредност „нум_1“ користећи адресу коју овде враћа „МиРетурнВалуеФунц“. Ова функција враћа алтернативно име „в1“ које је такође алтернативно име „нум_1“. Дакле, мењамо његову вредност и постављамо је на „91“. Додељујемо „91“ „МиРетурнВалуеФунц(нум_1)“ који овде делује као псеудоним. Затим поново штампамо вредност и адресу „нум_1“.

Код 2:

#инцлуде <иостреам>
користећи простор имена стд;
инт & МиРетурнВалуеФунц ( инт & в1 )
{
цоут << 'Вредност в1 = ' << в1 << ендл
<< ' Адреса в1 променљиве је '
<< & в1 << ендл;
повратак в1;
}
инт маин ( )
{
инт број_1 = 19 ;
инт & нум_2 = МиРетурнВалуеФунц ( број_1 ) ;
цоут << 'Вредност нум_1 = ' << број_1 << ендл
<< ' Адреса бр_1 је '
<< & број_1 << ендл;
цоут << 'Вредност нум_2 = ' << број_2 << ендл
<< ' Адреса бр_2 је '
<< & број_2 << ендл;
МиРетурнВалуеФунц ( број_1 ) = 91 ;
цоут << 'Сада, вредност нум_1 = ' << број_1 << ендл
<< „Адреса броја_1 је“
<< & број_1 << ендл;
повратак 0 ;
}


Излаз:

Као што је показано у наставку, можемо видети да је референца само алтернативно име за другу променљиву пошто је адреса вредности „в1“, „нум_1“ и „нум_2“ остала константна:

Пример 3:

Датотека заглавља „иостреам“ се увози и користи се именски простор „стд“. Пошто су бројне функције наведене у датотекама заглавља, увозимо их у Ц++ кодове. Овде креирамо функцију „РетурнРефФун()“ у коју постављамо „инт& ми_реф“ која враћа референцу. „инт& РетурнРефФун“ је овде декларисана као референтна функција. После овога повећавамо вредност променљиве „ми_реф“. Испод овога стављамо „ретурн“ који враћа референцу „ми_реф“.

После овога, овде се позива метода „маин()“. Затим иницијализујемо променљиву „фирст_валуе“ са „21“. Испод овога враћамо копију референце тако што ћемо „фирст_валуе“ ставити у функцију „РетурнРефФун“ и сачувати је у променљивој „цопиед_валуе“. Затим штампамо и „фирст_валуе“ као и „цопиед_валуе“ користећи „цоут“. Испод овога повећавамо променљиву „цопиед_валуе“ постављањем „цопиед_валуе++“. Затим штампамо „цопиед_валуе“ након што га повећамо и „фирст_валуе“ користећи „цоут“. Након тога, враћамо референцу уз помоћ иницијализације променљиве „инт& реф_валуе“ са „РетурнРефФун(фирст_валуе)“.

Након овога, штампамо вредност променљиве „ми_реф“ коју смо копирали. Затим штампамо вредност променљиве „фирст_валуе“. Испод овога повећавамо вредност „реф_валуе“ стављајући „реф_валуе++“. Испод овога штампамо увећану вредност „реф_валуе“ и такође променљиву „фирст_валуе“ уз помоћ „цоут“. Када се промени „реф_валуе“, промениће се и „фирст_валуе“.

Код 3:

#инцлуде <иостреам>
користећи простор имена стд;
инт & РетурнРефФун ( инт & ми_реф ) {
ми_реф++;
повратак ми_реф;
}
инт маин ( ) {
инт прва_вредност = двадесет један ;
инт цопиед_валуе =РетурнРефФун ( прва_вредност ) ;
цоут << 'Прва вредност је: ' << прва_вредност << ендл;
цоут << 'Копирана вредност је: ' << цопиед_валуе << ендл;
цопиед_валуе++;
цоут << 'Цопиед_валуе се повећава: ' << цопиед_валуе << ендл;
цоут << 'Прва вредност: ' << прва_вредност << ендл;
инт & реф_валуе =РетурнРефФун ( прва_вредност ) ;
цоут << 'Референтна копирана вредност: ' << реф_валуе << ендл;
цоут << 'Прва вредност: ' << прва_вредност << ендл;
реф_валуе++;
цоут << 'Референтна вредност се повећава: ' << реф_валуе << ендл;
цоут << 'Прва вредност: ' << прва_вредност << ендл;
повратак 0 ;
}


Излаз:

Ево исхода претходног кода где смо користили технику „повратне референце“. Пример показује разлику између враћања дупликата референтне променљиве и враћања саме референтне променљиве.

Пример 4:

Овде је „инт& рБиРеф“ декларисан као референтна функција која враћа референтну променљиву. Проследимо „инт& дата“ овој функцији „инт& рБиреф()“. Овде штампамо адресу променљиве „подаци“, а затим користимо повратну референцу испод ове. Сада иницијализујемо променљиву „к_вар” након што позовемо метод „маин()”. Затим овде штампамо адресу „к_вар“ тако што ћемо „&к_вар“ ставити у „цоут“.

Испод тога користимо референтну променљиву тако што ћемо „рБиреф(к_вар)“ доделити „инт& и_вар“. Затим штампамо и адресу те референтне променљиве „&и_вар“. Испод овога копирамо променљиву „к_вар“ у променљиву „з_вар“ и такође штампамо адресу ове копиране променљиве која је „&з_вар“. Након тога, позивамо функцију „рБиреф()“, прослеђујемо променљиву „к_вар“ као параметар унутар ње и додељујемо „93“ овој променљивој. Такође поново приказујемо адресу „к_вар“ стављањем „&к_вар“ у „цоут“.

Код 4:

#инцлуде <иостреам>
користећи простор имена стд;
инт & рБиреф ( инт & података )
{
цоут << 'Адреса података: ' << & података << ендл;
повратак подаци;
}
инт маин ( )
{
инт к_вар = 42 ;
цоут << 'Адреса к_вар: ' << & к_вар << ендл;
инт & и_вар = рБиреф ( к_вар ) ;
цоут << 'Адреса и_вар: ' << & и_вар << ендл;
инт з_вар = рБиреф ( к_вар ) ;
цоут << 'Адреса з_вар: ' << & з_вар << ендл;
рБиреф ( к_вар ) = 93 ;
цоут << 'Адреса к_вар: ' << & к_вар << ендл;
повратак 0 ;
}


Излаз:

Резултат јасно показује да се адреса клониране променљиве, „з_вар“, разликује од свих других локација на које оригинална променљива, „к_вар“, упућује.

Закључак

Концепт „повратне референце“ је детаљно истражен у овом водичу. Сазнали смо да је „повратна референца“ слична „показивачима“ у Ц++ програмирању. Разговарали смо о томе да симбол „&“ треба да се користи са типом повратка функције да бисмо назначили која функција враћа референцу. Илустровали смо неке примере и њихове исходе и разумели овај концепт у овом туторијалу.