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


Синф аъзоларини динамик тақсимланувчи соҳада жойлаштирилиши


Download 3.45 Mb.
bet64/79
Sana18.10.2023
Hajmi3.45 Mb.
#1707139
1   ...   60   61   62   63   64   65   66   67   ...   79
Bog'liq
cpp buxoro

Синф аъзоларини динамик тақсимланувчи соҳада жойлаштирилиши.


Синф аъзолари динамик тақсимланувчи соҳада жойлаштирилган объектларга кўрсаткичлар ҳам бўлиши мумкин. Бундай ҳолатларда бу объектлар учун хотирадан жой ёки конструктор, ёки синфнинг бошқа бир методлари орқали ажратилади. Қоида бўйича объект банд этган хотира соҳасини бўшатиш шу объектнинг деструкторини чақириш орқали амалга оширилади. (8.7. – листинг)


8.7. – листинг. Кўрсаткичлар синф аъзолари сифатида.
//8.7. – листинг.
//Синф аъзоларига кўрсаткичлар
# include
class SimpleCat
{
public:
SimpleCat( );
~SimpleCat( );
int GetAge( ) const { return *itsAge;}
void SetAge(int age) { * itsYosh= age }
int GetWeight ( int weight){ return * itsWeight; }
void SetWeight (int weight){ *itsOgirlik= weight }
private:
int * itsAge;
int * itsWeight;
}
SimpleCat::SimpleCat( )
{
itsYosh= new int(2);
itsOgirlik= new int(5);
}
SimpleCat::~SimpleCat( )
{
delete itsAge;
delete itsWeight;
}
int main( )
{
SimpleCat* Frisky = new SimpleCat;
cout<<“Frisky”<GetAge()<<“years old\n”;
Frisky -> SetAge(5);
cout<<“Frisky”<GetAge()<<“years old\n”;
delete Frisky;
return 0;
}

НАТИЖА:
Frisky 2 years old


Frisky 5 years old

ТАҲЛИЛ
2 та ўзгарувчи – аъзоси int типига кўрсаткич бўлган синф эълон қилдик. Синф конструкторида (17 – 21 – сатрлар) бу ўзгарувчиларни сақлаш учун жой ажратилди ва уларга бошланғич қиймат берилди. Ўзгарувчи – аъзо учун ажратилган хотира деструктор орқали бўшатилди (22 – 26 – сатрлар). Хотира бўшатилиши билан деструкторлар томонидан кўрсаткичларга нол қиймат ўзлаштирилиш ҳеч қандай маънога эга эмас, чунки кўрсаткич тегишли бўлган объектнинг ўзи ҳам ўчирилаяпти. Бундай ситуация хотира бўшатилгандан кейин кўрсаткичга ҳеч қандай қиймат ўзлаштирмаса бўладиган бир ҳолдир.


Синф аъзоларига мурожаат қилувчи функция (жорий мисолда main() функцияси) бажарилишида, сиз унинг қандай мурожаат қилишини билмаслигингиз ҳам мумкин. Сиз фақатгина синфнинг мос методлари (GetAge() ва SetAge() ) ларни чақирдингиз, хотира билан бошқа операциялар синфнинг ички механизми орқали бажарилди. Frisky объектини ўчиришда SimpleCat синфининг деструктори чақирилди (40–сатр). Деструкторда синф аъзолари томонидан белгиланган хотира бўшатилди. Агарда синфнинг бирор бир аъзоси фойдаланувчи томонидан аниқланган бошқа бир синфнинг экземпляри бўлса, у ҳолда бу синфнинг ҳам деструкторини чақириш зарурияти туғилади.
Албатта жорий мисолимиз учун ўзгарувчи – аъзоларни динамик хотирага жойлаштириш унчалик шарт эмас. Лекин реал дастурларда маълумотларни бундай кўринишда сақлаш услуби анча самарали усул ҳисобланади. Бунинг учун эса ечилиши керак бўлган масалани аниқ қўйилиши ғоятда муҳимдир. Ихтиёрий дастур лойиҳалаштиришдан бошланиши сизга маълум. Масалан, ўзгарувчи аъзоси иккинчи синфнинг объекти бўлган биринчи синфни ҳосил қилиш керак бўлсин. Бунда иккинчи синфнинг объекти биринчи синф объекти ҳосил қилингунча мавжуд эди ва у ўчирилгандан кейин ҳам йўқолмаслиги керак. Бундай ҳолларда албатта иккинчи объектга мурожаат кўрсаткич орқали амалга оширилиши лозим.
Масалан, биринчи объект ойна иккинчиси эса хужжат бўлсин. Маълумки, ойна орқали албатта хужжатга мурожаат бўлиши лозим. Бошқа томондан, ҳужжатнинг мавжудлик даври ойна томонидан ҳам бошқарилмайди. Шунинг учун ойна бу объектга кўрсаткич орқали мурожаат қилиши лозим.
Бундай ҳолларда кўрсаткич ўрнига ҳавола номли ўзгарувчи ҳам ишлатилади. ҳавола ҳақида 9 – мавзуда батафсил танишамиз.



Download 3.45 Mb.

Do'stlaringiz bilan baham:
1   ...   60   61   62   63   64   65   66   67   ...   79




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