class non { int ogirlik ; int baho ; void yasash ( ); void yopish ( ); void eyish ( ); } Синфни эълон қилишда хотира ажратилмайди. Синф эълон қилинганда компилятор фақат шундай (non) синф борлигини, ҳамда унда қандай қийматлар (оғирлик, баҳо) сақланиши мумкинлигини, улар ёрдамида қандай амалларни (ясаш, ёпиш, ёйиш) бажариш мумкинлиги ҳақида хабар беради. Бу синф объекти ҳаммаси бўлиб 4 байт жой эгаллайди (2 та int).
Объект синфнинг бирор бир нусхаси ҳисобланади.
C++ тилида тоифаларга қиймат ўзлаштирилмайди, балки ўзгарувчига ўзлаштирилади. Шунинг учун тўғридан-тўғри int=55 деб ёзиб бўлмаганидек non.баҳо=1200 деб ҳам бўлмайди. Ўзлаштиришда хатоликка йўл қўймаслик учун олдин nonсинфига тегишли patir объектини ҳосил қиламиз кейин эса унга керакли қийматларни берамиз.
Масалан:
int a; // butun toifali a o’zgaruvchisi, Obyekti non patir; // Endi non sinfining real Obyekti aniqlanganidan so’ng uning a’zolariga murojaat patir.baho = 1200; patir.ogirlik = 500; patir.yasash ( ) ; Sinfni e’lon qilishda quyidagilardan foydalaniladi: public - ochiq private – yopiq Синфнинг барча усул ва аъзолари бошланғич ҳолда автоматик равишда ёпиқ бўлади. Ёпиқ аъзоларга эса фақат шу синфнинг усуллари орқалигина мурожаат қилиш мумкин. Объектнинг очиқ аъзоларига эса дастурдаги барча функциялар мурожаат қилиши мумкин. Лекин синф аъзоларига мурожаат қилиш анча мушкул иш ҳисобланади. Aгар тўғридан тўғри:
non patir; patir.baho = 1200; patir.og`irlik = 500; deb yozsak xato bo’ladi. Aъзоларга мурожаат қилишдан олдин уни очиқ деб эълон қилиш керак:
# include < iostream.h > class non { public : int baho; int ogirlik; void yasash ( ); }; int main ( ){ non patir; patir.baho = 1200; patir.ogirlik = 500; cout <<“men olgan patir” <
cout <<“uning og’irligi =”<
3. Объектлар трассировкаси
Фойдаланувчи маълумотларни киритмагунча меню кутиб туради. Aгарда фойдаланувчи тўғри қийматни киритмаса, меню янгиланади, фойдаланувчи маълумотларни бошқатдан киритиши мумкин.
1 Қадам. Ўз объекттларингизнинг мажбуриятини белгиловчи рўйхат тузинг.
Фақат сизнинг топшириғингизни ечиш учун зарур бўлган функцияларни амалга оширинг. Реал нарсалар, масалан касса апарати ёки банк ҳисоб-рақами функциясини амалга ошириш учун ўн иккилик функциясидан фойдаланилади. Бироқ, сизнинг вазифанингиз реал дунёнинг моделини яратишдан иборат эмас. Сизнинг топшириғингизни ечиш учун зарур бўладиган вазифаларни аниқлаштириб олишингиз лозим.
Display the menu.(Menyu киритиш)
Get user input. (фойдаланувчидан кириш маълумотларини олиш)
Тавсиф муаммоси қисмига кирмайдиган яширин мажбуриятларга қаранг. Объект қандай яратилади? Қандай оддий фаолиятлар рўй бериши керак, ҳар бир савдони бошланишида касса апаратини тозалашга ўхшаш? Менюни тузишни меню яратиш мисолида кўриб чиқинг. Программист менюнинг бўш объектини яратади ва ундан сўнг “Янги аккаунт очиш”, “Ёрдам” опциясини қўшади. Бу ерда яширин мажбурият бор:
Menu main_menu; main_menu.add_option("Open new account"); // Add more options int input = main_menu.get_input(); Энди биз ўзига хос методлар рўйхатига эгамиз:
• void add_option(string option) • int get_input() const Меню чиқариш масаласичи? Менюни фойдаланувчидан маълумот киртишни сўрамасдан кўрсатишнинг маъноси йўқ. Aгар фойдаланувчи хато маълумот киритса get_input менюни бир мартадан ортиқ киритади. Шундай қилиб display хусусий метод учун яхши кандидатдир. Ижтимоий интерфейсни якунлаш учун сиз конструкторларни аниқлашингиз керак. Ўзингиздан сўранг объект яратиш учун сизга нима керак. Базан сиз 2 та конструкторга эхтиёж сезасиз: бири ҳамма элементлар учун default иккинчиси эса фойдаланувчи томонидан киритилган қийматларни ўрнатади. Меню мисолида биз бўш меню яратувчи ягона конструктор билан кифояланамиз.
3. Нусхалаш конструктори
Векторлар объектида паралел векторларни ярантинг. Баъзида, бир хил узунликдаги векторларни ишлатётганингизни англайсиз, ҳар бир сақлайдиган қисми объект ҳисобланади. Бу вазиятда, дастурингизни қайта яратиш ва элементлари объект саналадиган ягона вектордан фойдаланиш яхши фикрдир.
Масалан, фараз қилайлик ҳисоб рақами бир қатор тавсиф ва нархлардан иборатдир. Ягона ечим иккита векторни сақлаб туришдир: