Сілтемелік параметр


Жұмыс түрі:  Материал
Тегін:  Антиплагиат
Көлемі: 5 бет
Таңдаулыға:   

Сілтемелік параметр

Сілтемелік параметрі автоматты түрде қатысты аргумент адресін қабылдайды. Аргумент адресін қабылдауды «қолдан» ұйымдастыруға болғанымен, мұндай тәсіл қолайлы емес. Біріншіден, мұндай жол программалаушының барлық операцияны көрсеткіштерді пайдаланып ұйымдастыруға тура келеді. Екіншіден, функцияны көрсеткенде жоспарлаушы аргументтер мағынасын емес, оның адрестерін көрсетуді ұмытпаған жөн. С++ программасында компиляторларды сілтемеге автоматты түрде шақырулар қолдануға және ол нақты бір немесе бірнеше функциялардың параметріне бағытталады. Бұндай мүмкіншілік сілтемелік параметрінің арқасында жүзеге асырылады. Функцияның сілтемелік параметрін пайдаланғанда, аргументтің мағынасы емес, оның адресі беріледі. Функцияның кодын орындағанда, сілтемелік параметрінің операцияларын орындағанда, оның атауы автоматты түрде айырбасталады, сондықтан программалаушыға көрсеткіштермен жұмыс жасайтын операторларды пайдаланбауына болады.

Сілтемелік параметрі « & » символымен белгіленеді және ол хабарланған функция параметрінің атауына сай келуі керек. Сілтемелік параметрінің операциялары, шақырылған функцияның аргументіне ықпал етеді.

Сілтемелік параметрінің жұмыс істеу механизмін түсіну үшін, қарапайым мысалды қарастырайық. Келесі программада f( ) функциясы int типті сілтемелік параметрін қабылдайды.

#include <iostream>

using namespace std;

void f (int &i) ;

int main()

{

Int val = 1;

cout << ”val айнымалысының ескі мәні: “ <<val

<< ‘\ n’;

f(val) ; // val айнымалысының адресін f( ) функциясына жібереміз

cout << ”val айнымалысының жаңа мәні: “ <<val

<< ‘\ n’;

Return ( ) ;

}

void f (int &i)

{

i = 10; // шақыру кезіндегі аргумент модификациясы

}

Осы программаны орындау кезінде, мынандай нәтиже аламыз:

val айнымалысының ескі мәні: 1

val айнымалысының жаңа мәні: 10

f( ) функциясының анықталуына назар аударыңыз:

void f (int &i) ;

{

i = 10; // шақыру кезіндегі аргумент модификациясы

}

Сонымен, і параметрінің хабарламасын қарастырайық. Оның алдындағы & белгісі, і айнымалысын сілтемелік параметрге айналдыруға мүмкіндік береді. (Бұл хабарламаны функция прототипінде де қолданылады) . і = 10 нұсқауы і айнымалысына 10 мәнін қоспайды (бұл жағдайда ол өзі функция денесін құрайды) . Шынында 10 мәні і айнымалысы сілтенетін айнымалымен қосып алынады (біздің программада val айнымалысы) . Назар аударыңыз, бұл нұсқауда көрсеткіштермен жұмыс істеген кезде “*” қажетті операторы қолданбайды. Сілтемелік параметрді қолдана отырып, С++ компиляторына адрестің жіберілуін хабар етесіз, және ол сіздің орныңызға оның атын автоматты түрде өзгертеді. Егер сіз “*” операторын қолдану арқылы компиляторға көмек берем десеңіз, онда сол сәтте қате туралы хабарлама береді.

і айнымалысы сілтемелік параметрінде хабарланғандықтан, f( ) функциясына шақырылатын кез-келген аргументтің адресін береді. Осылайша main ( ) функциясында f (val) ; f( ) фунуциясына val айнымалысының адресін береді. Мұнда f( ) функциясын шақыру кезінде, val айнымалысының алдына « & » операторын қою қажеті жоқ екеніне назар аударыңыз (бұл жағдайда қате болар еді) . f( ) функциясы val айнымалысының адресін сілтеме түрінде қабылдайтын болғандықтан, ол осы айнымалының мәнін модификациялай алады.

Сілтемелік параметрлердің нақты қолдануын көрсету үшін, бізге таныс swap( ) сілтемелі функциясын қолдану арқылы келесі программаны орындаймыз.

#include <iostream>

using namespace std;

// сілтемелік параметрлерді қолданып, swap( ) функциясын енгіземіз.

void swap (int &x, int &y) ;

int main()

{

int i, j;

i = 10;

j = 20;

cout << “і және j айнымалылардың алдынғы мәндері: “;

cout << i << ‘ ‘ << j << ‘ \n’ ;

swap (j, i) ;

cout << “і және j айнымалылардың жаңа мәндері: “;

cout << i << ‘ ‘ << j << ‘ \n’ ;

return( ) ;

}

void swap (int &x, int &y)

{

int temp;

temp = x; // x адресінде орналасқан мәнді сақтаймыз.

x = y; // y адресі бойынша сақталған мәнді x адресіне ауыстырамыз.

y = temp; // x адресінде сақталған мәнді y адресіне көшіреміз.

}

Сонымен, x және y айнымалыларын сілтемелік параметрлермен хабарлау, сізді “*” операторын мәндерді алмастыруды ұйымдастыру кезінде қолданудан босатады. Компилятор swap( ) функциясын шақыру кезінде қолданылатын аргумент адрестерін генерациялайды және автоматты түрде x және y сілтемелерінің атын өзгертеді.

Сілтеменің қайтарымдылығы

Функция сілтемені қайтара алады. Егер функция сілтемені қайтарса, онда ол return инструкциясына жіберілетін, анықталмаған көрсеткіштің мәнін қайтарады. Бұл факт таң қаларлық мүмкіндіктерді ашады. С++ программалау тіліндегі қайтарымды функциялардың сілтемелік мағынасы үшін бірнеше амалдар қарастырылған.

// Сілтеменің қайтарымдылығы.

#include <iostream>

using namespace std;

double &f( ) ;

double val = 100. 0;

int main( )

{

double newval;

cout << f( ) << ‘\n’; // val мәнін көрсетеміз.

newval = f( ) ; // val мәніне newval айнымалысын қосып аламыз.

cout << newval << ‘\n’; // newval мәнін көрсетеміз.

f( ) = 99. 1; // val мәнін өзгертеміз.

cout << f( ) << ‘\n’; // val-дың жаңа мәнін көрсетеміз.

return 0;

}

Double &f( )

{

Return val; // сілтемені val-ға қайтарамыз

}

Бұл программаның орындалу нәтижесі мынадай болады:

100

100

99. 1

Бұл программаны нақтырақ қарастырайық. f( ) функциясына сүйенсек, ол сілтемені double мәніне қайтаруы керек. f( ) функциясын анықтағаннан кейін, 100 мәнімен меншіктелген val айнымылысын енгізу қажет. Келесі қадамды орындау нәтижесінде, val глобальды айнымалысының бұрынғы мәні шығарылады.

cout << f( ) << ‘\n’; // val мәнін көрсетеміз.

f( ) функциясын шақырғаннан кейін, сілтемені val айнымалысына қайтарады. Себебі, f( ) функциясы келесі жолды орындаған жағдайда, сілтеменің қайтарымдылығы «міндетті» болып, автоматты түрде глобальды val айнымалысына қайтарылады.

Return val; // сілтемені val-ға қайтарамыз.

Бұл сілтеме cout нұсқасымен val мәнін көрсетуге берілген.

Келесі жолды орындау кезінде

newval = f( ) ; // val мәніне newval айнымалысын қосып аламыз.

f( ) функциясымен қайтарылған val айнымалысына сілтеме, newval айнымалысының val мәнін қосып алуға қолданылады.

Осы программадағы ең маңызды жері

f( ) = 99. 1; // val мәнін өзгертеміз.

болып табылады. Бұл жолды орындау кезінде, val айнымалысының мәнін 99, 1 санына меншіктелінеді. Себебі мынада: f( ) функциясы val айнымалысына қайтарғандықтан, бұл сілтеме осы нұсқаудың меншіктелген қабылдағышы болып келеді.

Сонымен

cout << f( ) << ‘\n’; // val-дың жаңа мәнін көрсетеміз.

жолын орындау кезінде, val айнымалысының жаңа мәні көрсетіледі.

Қайтарымды функция ретінде сілтеме қолданылатын тағы да бір программаны мысалға келтірейік.

#include <iostream>

using namespace std;

double &change_it (int i) ; // функция сілтемені қайтарады.

double vals( ) = (1. 1, 2. 2, 3. 3, 4. 4, 5. 5) ;

int main ( )

{

int I;

cout << “соңғы мәні: ”;

for (i=0; i<5; i++)

cout << vals [ i ] << ‘ ‘;

cout << ‘\n’;

change_it (1) = 5298. 23; // 2-ші элементті өзгертеміз.

change_it (3) = -98. 8; // 4-ші элементті өзгертеміз.

cout << “өзгерген мәндер: ”;

for (i=0; i<5; i++)

cout << vals [ i ] << ‘ ‘;

cout << ‘\n’;

return 0;

}

double &change_it (int i)

{

return vals[ i ] ; // сілтемені i -ші элементке қайтарамыз.

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
С++ тілінде сілтемелерді қолдану
Windows операциялық жүйесінің тарихы
Кіріс және шығыс мәліметтері
Графикалық координаттар ( Турбо Паскаль )
Мәліметтер базасының жалған аты параметрлерінің терезесі
Оқу-әдістемелік кешен
С биоцентрлік координаттар негізінде үшбұрыштарды растеризациялау
Деректер базасына сұраныстар жасау
Интерфейс әдістері
Техникалық қызмет көрсету ақпараттық жүйесін тұрғызуды негіздеу
Пәндер



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz