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



бет25/43
Дата07.01.2022
өлшемі357,5 Kb.
#19368
1   ...   21   22   23   24   25   26   27   28   ...   43
Бақылау сұрақтары.

  1. Туынды класс объект үшін қандай да бір класс әдісін шақыруға бола ма және ол үшін нені көрсету керек?

  2. Кластар иерархиясында виртуалды әдістер не үшін керек, егер жұмыс көрсеткіштері қолданумен жүргізілсе?

  3. Виртуалды әдістер жұмыс ережесін құрыңыз?

  4. Қайта жүктелген әдіс құрамына үнсіздік бойынша берілген параметрлер ене ала ма?

  5. Қандай жағдайда класс әдістерін виртуалды жасау керек емес?

  6. Қандай түрде С++ тілінде олиморфизм жүзеге асырылады?


9–Дәріс Абстрактілі кластар.

    • Абстрактілі кластар.

    • Локальды кластар.

    • Класс құрылымы бойынша жасалатын ұсыныстар.

Ереже бойынша базалық класта жарияланған виртуалды функция ешқандай маңызды әдістерді орындамайды, Бұл әдеттегі жағдай, себебі жеке түрде базалық класта деректердің аяқталған типі анықталмайды.Оның орнына тек мүше функциясының базалық жиыны мен жетпейтіндердің бәрін туынды класс анықтайтын айнымалылар болады. Базалық кластың виртуалды функциясында негізгі әрекет болмаған кезде осы базалықтан кез келген туынды класта бұндай функция міндетті түрде қайта анықталған болуы керек . Бұны С++ тілінде жүзеге асыру үшін таза виртуалды деп аталатындар қолдау табады.(pure virtual function)

Таза виртуалды функциялар абстрактты әдістер базалық класта анықталмайды. Оған тек қана осы функциялардың прототиптері енеді. Таза виртуалды функция үшін осындай негізгі форма қолданылады:аты _типі(параметрлер_ тізімі)=0

Функцияларды нолге теңестіру компилятроға базалық класта осы функцияның денесі жоқ екендігін хабарлайды. Бұндай жағдайда ол әрбір туынды класта міндетті түрде ауыстырылып отыруы керек. Әйтпесе компиляция кезінде қате туындайды.

Ең болмаса бір абстракты әдісі бар класс абстрактты деп аталады.

Абстрактты класс басқа кластар үшін базалық ретінде қызмет ете алады-абстрактты класс объектісін құру мүмкін емес. Абстрактты кластан туынды кластар, абстрактты әдістер анықталуы керек немесе абстрактты сияқты қайт а жариялануы керек.

Абстрактты класс бар деп есептейік:

Class Base

{ protected :virtual void f(char)=0;

void func(int);

};
Base абстрактты класс негізінде туынды класты түрінде құруға болады:

Class Der1:public Base

{….void f (char); };

Class Der2:public Base

{….void func (int); };

Der1 класында f ( ) абстрактты әдісі осы типтің нақты виртуалды функциясымен ауыстырылған. Base: : func ( ) функциясы Der1 класымен мұрагерленеді және оның әдістері мен қатынауын мұрагерленеді. Der1 класы абстрактты емес. Der2 класында Base: : func ( ) функциясы қайта анықталған, ал Base: : f ( ) виртуалды функциясы мұрагерленген. Сонымен бірге класс Der2 абстрактты болады және базалық ретінде ғана қолданылады.

Әрбір клас сияқты абстрактты класс анықталған конструкторға ие болуы мүмкін. Конструктордан кластар әдістерін шақыруы мүмкін, бірақ кез келген тура немесе тура емес таза виртуалды функцияларға қатынасы бағдарламаны орындаған кездегі қателерге әкеледі.

Абстрактты кластар механизмі кейін нақтылауға ұсынылатын заттық облыстың жалпы түсініктерін беру үшін өндірілген. Бұл жалпы түсініктерді әдетте тікелей қолдану мүмкін емес, бірақ құруға жарамды жеке туынды кластарды құруға болады. Мысалы, абстрактты « Фигура» класынан «Үшбұрыш», «Шеңбер» және тағы басқа кластарды құруға болады.

Абстрактты әдістер кластармен жұмыс істеуге арналған анағұрлым маңызды ережелерді құрайық:



  • Әдіс параметрінің типі абстрактты класс бола алмайды, сонымен мәнді қайтаратын әдіс сияқты.

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

  • Абстрактты класс әдістері осы кластың абстрактты әдістерін шақыра алады. Осындай жағдайда объект типіне сәйкес келетін туынды класта анықталған әдіс шақырылатын болады.

  • Егер абстрактты кластан туынды класта барлық абстрактты әдіс функциялар шақырылса, онда туынды класс соған қоса абстрактты болып табылады.

  • Абстрактты кластан туынды кез келген класс одан абстрактты әдістерін мұрагерленеді. Туынды кластың объектісін құру мүмкіндігін алу үшін онда барлық абстрактты әдістерді қайта анықтау керек.

  • Абстрактты класс конструкторлар мен деструкторларға ие бола алады.

Абстрактты кластың конструкторы туынды класс объектілерін құрған кезде шақырылатын болады, ал деструктор- олардың қатынауы кезінде. Базалық класс деструкторы туынды кластарда анықталған « ішкі объктілер» бұзылғаннан кейін шақырылады. Сондықтан абстрактты базалық класс деструкторы өз класының абстрактты әдістерін шақырмау керек, себебі бұндай шақыру бағдарламаны орындағанда қатеге әкеледі.



Достарыңызбен бөлісу:
1   ...   21   22   23   24   25   26   27   28   ...   43




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

    Басты бет