1-Дәріс. Объектіге бағытталған бағдарламалаудың технологиясы


Көшіріп алу конструкторы. Беттік және тереңдетілген көшіріп алу



бет13/43
Дата07.01.2022
өлшемі357,5 Kb.
#19368
1   ...   9   10   11   12   13   14   15   16   ...   43
Көшіріп алу конструкторы. Беттік және тереңдетілген көшіріп алу

Класс құрамына арнаулы түр конструкторы – көшіріп алу конструкторы ене алады. Көшіріп алу конструкторы жалғыз параметрі ретінде осы класс обьектісіне сілтемені алады:

Classid : Classid (const Classid & obj)

{ конструктор денесі }

Көшіріп алу конструкторы жаңа обьект класс типімен бар обьектіні көшіріп алу жолымен құрылған кезде шақырылады:

– сол типтің басқа бар обьектісімен оның инициализациясы және класс типі бар жаңа объект анықтаған кезде;



  • мән бойынша класс типі бар параметр-объект класс әдісіне берілген кезде;

  • return операторы арқылы класс типі бар объект мәнін класс әдісінен қайтарылған кезде.

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

- беттік көшіруді орындайтын конструктор (көрсеткіштің обьектке көшірілуі орындалады, ал обьект көшірмесі динамикалық жадыда құрылады);

- тереңдетілген көшіріп алуы бар конструктор (динамикалық жадыда обьект көшірмесі құрылады).

Қорытындысында мынаны қайталайық, егер класта динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса, онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес. Осындай кластарды қолданатын бағдарламалар дұрыс жұмыс істейді.

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

Көрсетілген мақсатқа жету үшін келесі ережелерді қолданған жеткілікті:



  • мән бойынша класс типі бар параметрді, класс әдісіне берудің орнына бұл параметрді сілтемемен берген жөн, ал сәйкес аргументтің модификациясын тоқтату үшін функция параметрін const модификаторымен қамтамасыз ету керек;

  • класс типі бар обьектілер үшін арифметикалық операцияларды қайта жүктегенде қайта жүктеу әдісін обьектке қайтаратындай етіп жобалау керек (бұны әрқашан істеуге болады).



Достарыңызбен бөлісу:
1   ...   9   10   11   12   13   14   15   16   ...   43




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет