Ieteicams, 2020

Redaktora Izvēle

Atšķirība starp zvanu pēc vērtības un zvana pēc atsauces

C + + un Java sistēmā ir divi veidi, kā izsaukt funkciju vai metodi. Pirmais ir “zvana pēc vērtības” un otrais ir “izsaukums pēc atsauces”. Zvanu vērtības metode nodod tikai mainīgā lieluma vērtību funkcionālajam kodam, un, ja mainās kāda mainīgā vērtība šajā funkcijā, tā neietekmē šī mainīgā lieluma sākotnējo vērtību. Zvanu pēc atsauces metodes, mēs nododam pats mainīgo argumentā, un mainīgā lieluma izmaiņas ietekmē arī šī mainīgā sākotnējo vērtību. Galvenā atšķirība starp abām metodēm ir, ka zvanu vērtības metode pāriet uz mainīgā lieluma vērtību, un atsauce uz atsauces numuru pārsūta šī mainīgā adresi.

Salīdzināšanas diagramma:

Salīdzinājuma pamatsCall_By_ValueZvanīšana pēc atsauces
Pamata
Tiek mainīts mainīgā kopija.Tiek mainīts pats mainīgais.
IetekmeMainot mainīgā lieluma kopiju, funkcija nemaina mainīgās izejas puses sākotnējo vērtību.Mainīgais mainīgais ietekmē mainīgā vērtību ārpus funkcijas.
Zvanīšanas parametrifunction_name (mainīgais_nosaukums1, mainīgais_nosaukums2, ...);function_name (& mainīgais_nosaukums1, un mainīgais_nosaukums2, ...);
// objekta gadījumā
object.func_name (objekts);
Parametru saņemšanaierakstiet function_name (ierakstiet mainīgo_nosaukumu1, ierakstiet mainīgo_nosaukumu2, ...)
{. . }
ierakstiet funkciju_nosaukums (ierakstiet * mainīgais_nosaukums1, ierakstiet * mainīgais_nosaukums2, ...) {. . }
// objekta gadījumā
ierakstiet funkciju_nosaukums (class_type object_name)
{. . }
Noklusētais zvansprimitīvais tips tiek nodots, izmantojot "zvanu pēc vērtības".objekti tiek netieši nodoti, izmantojot "zvanu pēc atsauces".

Zvana pēc vērtības definīcija

Ja jūs nododat primitīvu datu tipu (vesels skaitlis, raksturs un virkne) funkcijai / metodei, tad tikai tā vērtība tiek nodota funkciju kodam. Funkcija kopē šo argumenta vērtību uz funkciju koda “formālo parametru”. Ja funkciju kodā ir izmaiņas formālajā parametrā, tas nemainīs argumenta sākotnējo vērtību, ko izmanto, lai izsauktu šo funkciju.

Vienkārši runājot, ja funkcija / metode tiek saukta ar “zvanu pēc vērtības” pieeju; tad mainīgā lieluma kopija tiek nodota funkciju kodam. Ja funkcijas kods maina mainīgā lieluma vērtību, tas nemaina mainīgā sākotnējo vērtību.

Redzēsim piemēru, lai to īsi saprastu.

 // piemērs Java klases pārbaudē {void change (int i, int j) {i = i * i; j = j / 2; system.out.println ("parametra vērtība funkcija"); system.out.println ("vērtība" i ", kas pieņem argumenta" a "" + i) vērtību; system.out.println ("vērtība" j, kas pieņem argumenta "b" "+ j" vērtību); }} klase call_by _value {public static void main (virkne args []) {int a = 12, b = 20; pārbaude C = jauna pārbaude (); system.out.println ("vērtība" a "un" b "pirms funkciju izsaukuma" + a + "" + b); C. maiņa (a, b); // zvans pēc vērtības. system.out.println ("vērtība" a "un" b "pēc funkcijas izsaukuma" + a + "" + b); }} // izejas vērtība “a” un “b” pirms funkcijas izsaukuma parametra 12 20 vērtības vērtība i, kas pieņem argumenta vērtību “144” vērtību “j”, kas pieņem vērtību “j”, kas pieņem vērtību arguments "b" 10 "a" un "b" vērtība pēc funkcijas izsaukuma 12 20 

Zvana atsauces definīcija

Izsaukuma atsauces metode nodod atsauces numuru / argumentu par funkciju kodu. Tā kā argumenta adrese tiek nodota funkciju kodam, formālais parametrs, kas pieņem šo adresi, būtu "rādītāja" mainīgais. Tagad, kad funkcijas kods ir saņēmis argumenta adresi, argumenta vērtības izmaiņas arī mainīs argumenta sākotnējo vērtību.

C + + un Java režīmā ir ļoti bieži nodot objektu uz funkciju / metodi, un objekts vienmēr tiek nodots ar tās atsauci. Izmaiņas, kas veiktas objekta iekšpusē funkcijas / metodes ietvaros, ietekmē objektu, ko izmanto, lai atsauktos uz šo funkciju / metodi.

Sekojošais fragments parāda pareizo veidu, kā “izsaukt atsauci”.

 // piemērs C + + klases mijmaiņas darījumā {void swap (int * x, int * y) {int temp; temp = * x; * x = * y; * Y = temp; }} int main {int a = 10, b = 20; cout << "vērtība a, b pirms funkcijas izsaukuma" << a << "" < 

Tagad diskutēsim par “izsaukumu ar atsauci”, nododot “objektu” kā argumentu, ko netieši nodod pie pieejas “izsaukuma ar atsauci”.

 klases pārbaude {int a, b; pārbaude (int x, int b) {// objekts, kas inicializēts caur šo konstantu a = x; b = y; } tukša apmaiņa (pārbaude ob) {ob.a = a * 2; ob.b = b / 2; }} class main_class {public static void main (virkne args []) {pārbaude C = jauna pārbaude (20, 40); // objekta inicializācija. system.out.println ("vērtība" ob.a "un" ob.b "pirms funkciju izsaukuma" + ob.a + "" + ob.b); C. apmaiņa (C); // zvans pēc atsauces. system.out.println ("vērtība" ob.a "un" ob.b "pirms funkciju izsaukuma" + ob.a + "" + ob.b); }} // izejas vērtība 'ob.a' un 'ob.b' pirms funkcijas izsaukuma 20 40 vērtība 'ob.a' un 'ob.b' pēc funkcijas izsaukuma 40 20 

Galvenās atšķirības starp zvanu pēc vērtības un izsaukuma pēc atsauces

  1. Argumenta nodošana, izmantojot pieeju “zvanu pēc vērtības”, ir tikai šī mainīgā kopija, tāpēc izmaiņas, kas izdarītas mainīgā lieluma vērtībā, neietekmē šī mainīgā lieluma sākotnējo vērtību. Piezīme “izsaukums pēc atsauces” pats par sevi tiek mainīts kā arguments, tāpēc izmaiņas tajā maina sākotnējā mainīgā vērtību.
  2. Ja pieņemtie argumenti ir primitīvi datu tipi, tie vienkārši ir “zvana pēc vērtības”, bet, ja argumentu vai objektu atsauces / adreses tiek nodotas, tad funkcija tiek saukta ar “zvanu pēc atsauces” metodi.
  3. Pieejamās vērtības noteikšanas pieejā pieņemtie argumenti ir tikai mainīgo lielumu nosaukums, savukārt “izsaukuma pēc atsauces” pieejas gadījumā pieņemtie argumenti ir, mainīgā nosaukums gar “&” zīmi, vai objekts, kas tiek nodots tikai pēc tā nosaukuma.
  4. Argumenta parametru saņemšana, izmantojot pieeju “zvana vērtība”, ir mainīgs nosaukums kopā ar datu tipu. Piezīme “zvans pēc atsauces” saņemšanas parametrs vienmēr ir rādītāja mainīgais kopā ar datu tipu un objekta gadījumā tas ir objekta nosaukums kopā ar tās klases tipu.

Secinājums:

C ++ un Java izmanto abas pieejas atkarībā no tā, kas ir pagājis. Ja vēlaties pārsniegt tikai mainīgās lietošanas vērtības vērtību pēc vērtības, un ja vēlaties redzēt mainīgā lieluma mainīgo vērtību, tad izmantojiet “zvanu pēc atsauces” pieeju.

Top