List
шаблонының
print
жалпылама əдісінің тақырыбы мынадай түрде болса:
template void List :: print();
онда символдардың тізімін шығаруға арналған əдіс келесідей болады:
void List ::print(){
... // print əдісінің арнайы нұсқасының тұлғасы
}
Егер программада
char
типті
List
шаблонының данасын (экземплярын)
құратын болсақ, əдістің сəйкес нұсқасы автоматты түрде шақырылады.
Бүтін класты специализациялау кезінде кластың жалпылама нұсқасын
сипаттағаннан кейін специализацияланған кластың толық сипаттамасы ор-
наластырылады, бұл кезде оның барлық əдістерін қайта анықтау қажет. 100
бүтін сан түріндегі шаманы сақтау үшін алдынғы бөлімде сипатталған
Block
шаблоныны специализациялау қажет болсын делік
1
:
class Block{
public:
Block(){p = new int [100];}
1
Мұның терең мағынасын іздеудің қажеті жоқ – мысал синтаксисті көрсету үшін берілген.
239
~Block(){delete [] p;}
operator int *();
protected:
int * p;
};
Block::operator int *(){
return p;
}
Block
шаблонының даналарын (экземплярларын)
int
жəне 100
параметрлері арқылы анықтау кезінде специализацияланған нұсқа іске
қосылады.
Шаблондардың артықшылықтары мен кемшіліктері
Шаблондар əртүрлі мəліметтер типтерімен жұмыс істеудің қуатты əрі
тиімді құралы болып табылады, оны басқаша параметрлі полиморфизм деп
те атауға болады. Сонымен қатар, шаблондар препроцессор макростары-
на қарағанда, типтерді қауіпсіз қолдануды қамтамасыз етеді. Шаблондарды
қолданатын программада əрбір туынды тип үшін толық код болатынын еске-
ру керек, бұл орындалатын файлдың көлемін арттыруы мүмкін. Сонымен
қатар, кейбір мəліметтер типтерімен шаблондар басқа типтерге қарағанда
айтарлықтай тиімді жұмыс жасамауы мүмкін. Мұндайда шаблонның специ-
ализациясын қолданған жөн.
C++ стандартты кітапханасы мəліметтерді сақтау мен өңдеуді
ұйымдастырудың əртүрлі тəсілдеріне арналған шаблондардың үлкен
жиынтығы болып келеді («Контейнерлік кластар» бөлімін, 318 б. қараңыз).
Класс шаблондары практикумның [12] үшінші семинарында түпкілікті
қарастырылған.
240
Достарыңызбен бөлісу: |