Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TRPO.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
64.53 Кб
Скачать

13 Конструкторлар,деструкторлар және мұрагерлік.

Егер базалық және туынды кластардың конструкторлары мен деструкторлар бар болса, онда конструкторлар мұрагерлік тәртібімен орындалады, ал деструктор кері тәртіпте.

Базалық класта инициализация бірінші болып орындалуы керек, ал туынды класс деструкторы объект жойылғанға деін шақырылуы керек.

Базалық және туынды кластардың барлық қажет аргументтері туынды класс объектілері құрылғанда туынды класс конструкторына беріледі. Кейін туынды класс конструкторын жариялаудың кеңейтілген формасын қолдана отырып сәйкес аргументтер әрі қарай базалық класқа беріледі. Аргументтерді туындыдан базалық класқа берілу синтаксисі төменде көрсетілген.

туынды_класс_конструкторы ( аргументер_тізімі): базалық_классс (аргументтер_ тізімі)

Базалық және туынды кластар үшін бірдей элементтерді қолдану рұқсат етілген. Сонымен туынды класс үшін базалық аргументтерді елемеуге және тікелей оларды базалық класқа беру рұқсат етілген(допустимо).

14 Абстрактілі класс. Полиморфты класс.

Ереже бойынша базалық класта жарияланған виртуалды функция ешқандай маңызды әдістерді орындамайды, Бұл әдеттегі жағдай, себебі жеке түрде базалық класта деректердің аяқталған типі анықталмайды.Оның орнына тек мүше функциясының базалық жиыны мен жетпейтіндердің бәрін туынды класс анықтайтын айнымалылар болады. Базалық кластың виртуалды функциясында негізгі әрекет болмаған кезде осы базалықтан кез келген туынды класта бұндай функция міндетті түрде қайта анықталған болуы керек . Бұны С++ тілінде жүзеге асыру үшін таза виртуалды деп аталатындар қолдау табады.(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); };

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

Класс - бұл бар типтер негізіндегі туынды құрылымы бар (структурированный) тип.Класты ең оңай әдіспен келесі конструкция арқылы анықтауға болады:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]