Көшіріп алу конструкторы. Беттік және тереңдетілген көшіріп алу Класс құрамына арнаулы түр конструкторы – көшіріп алу конструкторы ене алады.Көшіріп алу конструкторы жалғыз параметрі ретінде осы класс обьектісіне сілтемені алады:
Classid:Classid (const Classid & obj)
{конструктор денесі}
Көшіріп алу конструкторы жаңа обьект класс типімен бар обьектіні көшіріп алу жолымен құрылған кезде шақырылады:
-сол типтің басқа бір обьектісімен оның инициализациясы және класс типі бар жаңа обьект анықтаған кезде;
-мән бойынша класс типі бар параметр-обьект класс әдісіне берілген кезде;
-return операторы арқылы класс типі бар обьект мәнін класс әдісінен қайтарылған кезде.
Егер бағдарламалаушы бірде бір көшіріп алу конструкторын құрмаса, онда компилятор автоматты түрде Үндемейтін көшіріп алу конструкторын құрады.Бұндай конструктор кластың мәліметтер өрістерінің элемент бойынша көшіріліуін орындайды.
Егер өрістердің ең болмаса біреуі динамикалық жадының белгілі бір облысына көрсеткіш болып табылмаса,онда үндемейтін конструкторды қолдану бағдарламаның дұрыс емес,яғни бұрыс жұмысына әкеледі.Бұндай жағдайда үндемейтін көшіріп алу конструкторының орнына өз көшіріп алу конструкторын жобалап алған жөн:
-беттік көшіруді орындайтын конструктор (көрсеткіштің обьектке көшірілуі орындалады,ал обьект көшірмесі динамикалық жадыда құрылады);
-тереңдетілген көшіріп алуы бар конструктор(динамикалық жадыда обьект көшірмесі құрылады).
Қорытындысында мынаны қайталайық,егер класта динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса,онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес.Осындай кластарды қолданылатын бағдарламалар дұрыс жұмыс істейді.
Мүмкіндігінше мән бойынша,класс типі бар параметрді кластың әдісіне және класс типі бар обьекттің мәнін емес,сілтемесін оған класс әдісіне қайтарудан аулақ болған жөн.Бұл жағдайда көшіріп алу конструкторы қажет емес болады,бұл қосымшаның шапшаңдығының жоғарылауына әкеледі.
Көрсетілген мақсатқа жету үшін келесі ережелерді қолданған жеткілікті:
-мән юойынша класс типі бар параметрді,класс әдісіне берудің орнына бұл параметрді сілтемемн берген жөн,ал сәйкес аргументтің модификациясын тоқтату үшін функцмя параметрін const модификаторымен қамтамасыз ету керек;
-класс типі бар обьектлер үшін арифметикалық операцияларды қайта жүктегенде қайта жүктеу әдісін обьектке қайтаратындай етіп жобалау керек.
Қорытынды Қорытындылап айтқанда С++ тіліндегі класстар көптеген операцияларды қолданушы типтердің обьектілерімен жұмыс істейді және қайта жүктеу мүмкіншілігіне ие. Мұндай мүмкіндіктер обьект-кластар үшін болады. Операцияның қайта жүктелуі, кластың функция-операциясы көмегімен жүзеге асырылады, оны класс мүшесі немесе достық функциясына айналдырүға немесе жай функцияға айналдыруға болады. Операцияларды қайта жүктеу типті беру, функцияларды шақыру ережелері халықаралық стандартында берілген. Класста бірнеше конструкторларды құруға болады.
Класс обьектісін құрған кезде ол үшін сәйкес келетін конструктор автоматты түрде шақырылады. Обьекттің мүше берілгендердің (обьект айнымалыларының) инициализациясы конструктордың орындалуы сияқты инициализациясы кезінде де орындала алады. Қорытындылап айтқанда, егер жадыда динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса, онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес. Осындай кластарда қолданылатын бағдарламалар дұрыс жұмыс істейді.
Пайданылған әдебиеттер 1. С/С++ программирование на языке высокого уровня\ Т.А
2. Бруно Бабэ. Просто и ясно о Borland С++: пер.с англ. — Бинам, 1994.
3. Тихомиров Ю. Visual С++6.Спб.:БХВ – Петербург, 1999.
4. Шиманович Е.Л. С/ ++В примерах и задачах –МН.: Ковое знание 2004.