Сайфиев ж. Ф. С++ тилига кириш услубий қўлланма


Ўзгармас кўрсатгичларни параметр сифатида узатиш



Download 3,43 Mb.
bet77/79
Sana09.07.2022
Hajmi3,43 Mb.
#767124
1   ...   71   72   73   74   75   76   77   78   79
Bog'liq
C dan uslubiy qulanma

Ўзгармас кўрсатгичларни параметр сифатида узатиш.




FunctionTwo() функцияси самарадор бўлиши билан бирга айрим камчиликларга ҳам эга. FunctionTwo() функцияси чақирилганда унга узатиладаган SimplеCat синфининг объектини ўзгартиришга ҳуқуқи йўқ эди. Бундай усулда узатиш объектни ўзгартириш имконини очиб беради ва объектни қиймат сифатида узатилишида таъминланган ҳимоясини бекор қилади.
Объектларни қиймат сифатида узатиш музейга ҳақиқий асар фотографиясини топширишга ўхшаган амалдир. Агарда бирор бир бекорчи фотосуратни бузиб қўйса унинг оригиналига ҳеч қандай зарар етмайди. Ҳавола бўйича объектларни узатиш эса музейга ўзингизни уй адресингизни қолдириш ва ўзингизни иштирокингизда қимматбаҳо жиҳозга кўришга ўхшайди.
Бу муаммони функцияга SimplеCat синфининг объектига ўзгармас кўрсатгични узатиш орқали ҳал қилиш мумкин. Бу ғоя 9.11. - листингда намойиш қилинган.
9.11. – листинг. Ўзгармас кўрсатгичларни параметр сифатида узатиш.
// 9.11. – листинг.
// Объектни ўзгармас кўрсаткичларини узатиш

# include < iostream.h >


class SimpleCat


{
public :
SimpleCat();
SimpleCat(Simple Cat&);
~SimpleCat();

int GetAge() const { return itsYosh};


void SetAge(int age) { itsYosh= age ; }

private :


int itsYosh;
};

SimpleCat:: SimpleCat()


{
cout << “Simple CatConstructor …\ n” ;
itsYosh= 1;
}

SimpleCat:: SimpleCat( SimpleCat& )


{
cout<<“SimpleCat Copy Constructor … \n” ;
}

SimpleCat::~SimpleCat()


{
cout<<“SimpleCat Destructor …\n” ;
}

SimpleCat *FuctionTwo(const SimpleCat * const theCat);


int main()


{
cout<< “Making a Cat… \ n”;
SimpleCat Frisky;
cout<<“Frisky is ” ;
cout<< Frisky.GetAge ( );
cout<< “years old \n”;
int age = 5;
Frisky SetAge(age);
cout <<”Frisky is”;
cout <cout << “years old \n”;
cout << “Calling Function Two …\ n”;
FunctionTwo( &Frisky ):
cout << “Frisky is”;
cout << Frisky.GetAge();
cout <<” years old \ n”
return 0;
}
// FunctionTwoга ўзгармас кўрсатгич узатилаяпти.
const SimpleCat* const FunctionTwo (const SimpleCat* const theCat)
{
cout << “Function Two. Returning . . .\n”;
cout << “Frisky is now” << theCat – >GetAge( );
cout << “years old\n”;
// theCat–>SetAge(8); Const!
return theCat
}

НАТИЖА:
Making a Cat…


Simple CatConstructor…
Frisky is 1 years old
Frisky is 3 years old
Calling FunctionTwo…
FunctonTwo. Returning…
Frisky is now 5 years old
Frisky is 5 years old
Simple CatDestructor.

ТАҲЛИЛ
SimpleCat синфига иккита функция ва битта ўзгарувчи –аъзо (itsAge) қўшилди. Функциялардан бири ўзгармас (GetAge), иккинчиси эса ўзгармас функция эмас (SetAge).


Дастурда конструктор, конструктор–кўчирувчи ва деструктор худди олдинги листингдагидек аниқланган. Лекин натижалардан бирор марта конструктор – кўчирувчи чақирилмаганлигини кўриб турибмиз. Бунинг сабаби объект ҳавола кўринишида узатиляпти ва бунинг натижасида унинг нусхаси тузилмаяпти. 41–сатрда бошланғич берилган қийматдаги ёш билан тузилди. Бу қиймат 42 – сатрда экранга чиқарилди.
46–сатрда SetAge() методи ёрдамида itsYosh ўзгарувчисининг қиймати ўзгартирилди, унинг натижаси эса 47 – сатрда экранга чиқарилди. Бу дастурда FunctionOne() функцияси ишлатилмаяпти, лекин FunctionTwo() функциясининг озгина ўзгартирилгани чақирилаяпти. Унинг эълон қилиниши 36 – сатрда келтирилган. Бу сафар унинг параметри ҳам, қайтарадиган қиймати ҳам ўзгармас объектга ўзгармас кўрсатгич сифатида аниқланган.
Параметр ҳам, қайтариладиган қиймат ҳам ҳавола сифатида аниқланганлиги учун ҳеч қандай нусха тузилмайди ва кўчирувчи – конструктор ҳам чақирилмайди. Фақатгина FunctionTwo() функциясининг кўрсатгичлари энди ўзгармасдир, ва ўз навбатида у орқали ўзгармас бўлмаган методни (SetAge()ни ) ишлатиб бўлмайди. Агарда 64 – сатрдаги SetAge() методига ҳавола изоҳга олинмаса эди, дастурнинг компиляция жараёни амалга ошмас эди.
main() функцияси ичида тузилган объект ўзгармас эмас эди ва Frisky объекти SetAge() методини чақира олар эди. Бу оддий объектнинг адреси FunctionTwo() функциясига берилди. FunctionTwo() функцияси эълон қилинишида унга узатиладиган параметр ўзгармас объектга ўзгармас кўрсаткич эканлиги айтилган эди. Шунинг учун бу объектнинг функцияси ўзгармас бўлсагина унга ҳавола қилиш мумкин.



Download 3,43 Mb.

Do'stlaringiz bilan baham:
1   ...   71   72   73   74   75   76   77   78   79




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish