Кіріспе

Деректер құрылымының түрі туралы ақпарат

C++ тіліндегі сынып – бұл пайдаланушы анықтаған тип немесе дерек құрылымы, ол `class`, `struct` немесе `union` кілт сөздерінің кез келгенімен жарияланады (алғашқы екеуі жиынтығында одақтық емес сыныптар деп аталады). Сыныптың мүшелері ретінде деректер мен функциялар (олар мүшелік айнымалылар және мүшелік функциялар деп те аталады) болады, оларға қол жеткізу үш қол жеткізу спецификаторымен – `private` (жеке), `protected` (қорғалған) немесе `public` (қоғамдық) арқылы реттеледі. `class` кілт сөзімен жарияланған C++ сыныбының мүшелеріне қол жеткізу әдепкі бойынша жеке болып табылады. Жеке мүшелер сыныптан тыс жерде қол жетімді емес; оларға тек сыныптың мүшелік функциялары арқылы ғана қол жеткізуге болады. Қоғамдық мүшелер сыныпқа интерфейс құрайды және сыныптан тыс қол жетімді болады. Сынып дерек типінің инстанциялары объектілер деп аталады және олар бағдарламашы анықтаған мүшелік айнымалыларды, тұрақтыларды, мүшелік функцияларды және жүктемелі операторларды қамтуы мүмкін.

C ++ құрылымы мен класының арасындағы айырмашылықтар

C++-та class кілт сөзбен анықталған сыныптың мүшелері жеке және негізгі сыныптары әдепкі бойынша жасырын болады. Struct кілт сөзбен анықталған құрылым – бұл сынып. Оның мүшелері мен негізгі сыныптары әдепкі бойынша қоғамдық. Көбінесе құрылымдар функциясыз деректерді сақтау үшін қолданылады. Егер құрылымды сыныптан немесе құрылымнан шығарса, негізгі сыныпқа/құрылымға әдепкі кіру спецификаторы қоғамдық болады. Ал сыныптан шығарғанда әдепкі кіру спецификаторы жеке болады.

POD-құрылыстары

POD struct (Plain Old Data Structure) – статикалық емес дерек мүшелерінде POD емес құрылымдар, POD емес біріктірулер (немесе осындай типтердің массивтері) немесе сілтемелер болмайтын, сондай-ақ пайдаланушы анықтаған тапсыру операторы мен пайдаланушы анықтаған деструкторы жоқ агрегаттық класс. Осы себепті POD құрылымдары кейде «C стильді құрылымдар» деп аталады.

C және C ++ POD-структуралары арасында ортақ қасиеттер

Деректер мүшелері объекті ішінде келесі мүшелерге қарағанда төменгі мекенжайларға орналастырылады, егер олар кіру спецификаторымен бөлінбесе. Екі POD struct типі, егер олардың статикалық емес деректер мүшелерінің саны бірдей болса және сәйкес статикалық емес деректер мүшелері (реттілігі бойынша) макет бойынша үйлесімді типтерге ие болса, макет бойынша үйлесімді болады. POD struct құрылымында атаусыз толтырулар болуы мүмкін. POD struct объектісіне көрсеткіш, тиісінше қайта интерпретациялау арқылы түрлендірілгенде, оның бастапқы мүшесіне және керісінше нұсқау көрсетеді, яғни POD struct құрылымының басында толтыру жоқ екенін білдіреді.

Декларация және пайдалану

C++ кластарының өз мүшелері болады. Бұл мүшелерге айнымалылар (басқа құрылымдар мен сыныптарды қоса алғанда), функциялар (нақты идентификаторлар немесе жүктемеленген операторлар), сондай-ақ мүше функциялары, конструкторлар және деструкторлар кіреді. Мүшелер `public:` және `private:` қолжетімділік спецификаторларын пайдаланып, тиісінше ашық немесе жеке қолжетімді деп жарияланады. Кез келген спецификатордан кейін кездесетін мүше, келесі спецификаторға дейін сол қолжетімділік деңгейін сақтайды. Кластар арасындағы мұрагерлікте `protected:` спецификаторын да пайдалануға болады.

Әлемдік және жергілікті сынып

Барлық функциялардан тыс анықталған сынып – жаһандық сынып болып есептеледі, себебі оның объектілерін бағдарламаның кез келген жерінен жасауға болады. Егер сынып функцияның ішінде анықталса, ол жергілікті сынып болады, өйткені мұндай сыныптың объектілері тек сол функцияның аясында ғана қолданылады.

Құрылысшылар мен қиратушылар арасындағы ұқсастықтар

Екеуі де олар жарияланған сыныптың атын алып жүреді. Егер пайдаланушы оларды жарияламаса, олар әдепкі бойынша бір сыныпта қолжетімді болады, бірақ енді олар жадыны тек сыныптың объектілерінен ғана бөліп, босата алады, объект жарияланғанда немесе жойылғанда. Туынды сынып үшін: Базалық сынып конструкторы жұмыс істеп жатқанда, туынды сынып конструкторы әлі шақырылмайды; базалық сынып деструкторы жұмыс істеп жатқанда, туынды сынып деструкторы бұрыннан шақырылған болады. Екі жағдайда да, туынды сыныптың мүшелік айнымалылары жарамсыз күйде болады.

Сынып үлгілері

C++ тілінде сынып жарияланымдары сынып үлгілерінен жасалуы мүмкін. Мұндай сынып үлгілері сыныптар тобын көрсетеді. Нақты сынып жарияланымын алу үшін үлгі бір немесе бірнеше үлгі аргументтерімен нақтыландырылады. Белгілі бір аргументтер жиынымен нақтыланған үлгі, үлгінің мамандануы деп аталады.

Қасиеттері

C++ синтаксисі сыныптың барлық аспектілерін қарапайым дерек түрлеріне ұқсатуға тырысады. Сондықтан, жүктемелі операторлар сыныптарды бүтін сандар мен қалқыма нүктелі сандар сияқты пайдалануға мүмкіндік береді, сыныптар массиві квадрат жақша синтаксисімен (кейбір құрылым айнымалысының аты [өлшемі]) жариялануы мүмкін, ал сыныптарға көрсеткіштер қарапайым дерек түрлеріне көрсеткіштер сияқты қолданылуы мүмкін.

Анықтама бойынша өту

Көптеген бағдарламашылар құрылымдарды қолданатын функциялардың аргументтерін жариялау үшін амперсандты (&) пайдалануды қалайды. Себебі, дерексіздендіру амперін пайдалану арқылы функцияға тек бір сөз (әдетте 32 биттік машинада 4 байт, 64 биттік машинада 8 байт) ғана жіберіледі, яғни айнымалының жад мекенжайы. Әйтпесе, мәнді жіберу (pass by value) қолданылса, функция шақырылған сайын аргументті көшіру керек, бұл үлкен құрылымдар үшін қымбатқа түседі. Сілтеме арқылы жіберу (pass by reference) функцияға бастапқы құрылымды өзгертуге мүмкіндік беретіндіктен, егер мұндай өзгеріс қажет болмаса, функция параметрді өзгерте алмайтынын кепілдендіру үшін `const` кілт сөзін қолдану керек (қараңыз, `const` дұрыстығы).