Объектга йўналтирилган программалаш


Obekt1.Funktsiya(arg1,arg2)


Download 0.58 Mb.
bet10/71
Sana08.05.2023
Hajmi0.58 Mb.
#1444224
TuriПрограмма
1   ...   6   7   8   9   10   11   12   13   ...   71
Bog'liq
С ОЙП

Obekt1.Funktsiya(arg1,arg2);
компилятор томонидан
Obekt1.Funktsiya(&Obekt1, arg1,arg2);
кўринишида талқин қилинади.
Функция чақирилганда унинг қавс ичидаги аргументлари стекка ўнгдан чапга томонга қараб жойлаштирилди. Биринчи аргумент (this) стекка энг охирда жойлашади. Функция–аъзо ичида объектлар адреси this орқали аниқланади. Қуйида this кўрсаткичини ишлатиш билан боғлиқ программа матнини келтирилган.
#include
#include
class S
{
char Ism[20];
public:
S(char*);
void Salom();
};
S::S(char * _Ism)
{
strcpy(Ism, _Ism);
Salom(); // учта мурожаат
this -> Salom(); // ўзаро
(*this).Salom(); // эквивалент
}
void S::Salom()
{
cout<<”Salom “<
cout<<”Salom “<Ism<<’\n’;
}
int main( )
{
S obekt(“Muqumov Rustam”);
return 0;
}

Программа матнидан кўриниб турибдики, функция-аъзо ичида бошқа функция-аъзоларга ва берилганлар–аъзоларга бевосита уларнинг номлари билан ёки this кўрсаткичи орқали мурожаат қилиш мумкин. Шу сабабли амалиётда this кўрсаткичидан кам фойдаланилади. Асосан, this кўрсаткичи функция қайтарувчи қиймати сифатида (return this; ёки return *this;) ва операторларни қайта юклаш масалаларида кенг қўлланилади.


Жойлаштириладиган (inline) функциялар–аъзолар

Функциялар бўлимида inline функциялар ҳақида маълумот берилган эди. Уларнинг бошқа функциялардан фарқи – компилятор программада бундай функциялар чақирилган жойга функцияни чақириш буйруғини эмас, балки функция танасини қўяди. inline функцияларнинг афзаллиги шунда эдики, программада оддий функцияни чақиришдаги аргументларни узатиш, стекка қийматларни жойлаштириш ва қайта олиш билан боғлиқ қўшимча амаллар бажарилмайди. Ноқулай томони, inline функцияга мурожатлар кўп бўлганда программа ҳажми ошиб кетади. Бу ўринда inline функциялар қўлланишини макросларни ишлатишга ўхшатиш мумкин. Шу сабабли, одатда жуда содда функциялар inline функциялар сифатида ишлатилади. Функциялар аниқланишда inline спецификаторини қўйишни компиляторга функция чақирилган жойларга функция танасини қўйишга талаб деб қаралади. Агар компилятор функция танасини қўйишни амалга ошира олмаса, inline функция оддий функция сифатида ишлатилади. Компилятор қуйидаги ҳолатларда inline функцияни чақирув жойига қўя олмайди, агарда функция:



  • танасида такрорлаш операторлари ишлатилган бўлса (for, while, do while);

  • танасида switch, goto операторлари бўлса;

  • static ўзгарувчиларни ишлатса;

  • рекурсив бўлса;

  • void туридан фарқи қайтарувчи турга эга ва танасида return оператори бўлмаса;

  • танасида ассемблер кодли бўлаклар мавжуд бўлса.

Жойлаштириладиган функциялар сифатида нафақат оддий функциялар, балки синфнинг функция– аъзолари ҳам аниқланиши мумкин. Бунинг учун синф эълонида функция–аъзони эълонига унинг аниқланишини қўйиш етарли ёки синфдан ташқаридаги функция аниқланишида, функция сарлавҳаси олдига inline спецификаторини қўйиш зарур бўлади. Қуйида келтирилган мисолда жойлаштирилувчи функция – аъзоларининг икки хил вариантдаги эълони кўрсатилган.

Download 0.58 Mb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling