Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет326/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   322   323   324   325   326   327   328   329   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

pbeg = pbeg->next; 

pbeg->prev = 0; } 


231

      else if (pkey == pend){   // Тізім соңынан өшіру 

pend = pend->prev; 

pend->next = 0;} 

      else { 

                 // Тізім ортасынан өшіру

(pkey->prev)->next = pkey->next; 

(pkey->next)->prev = pkey->prev;} 

delete pkey; 

return true;} 

   return false;

}

Тізімді тура жəне кері бағыттарды басып шығару əдістері соларға сəйкес 

сілтемелер арқылы көше отырып, тізімді жеке элементтер бойынша қарап 

шығады:


void List::print(){ 

   Node *pv = pbeg; 

   cout << endl << "list: "; 

   while (pv){

      cout << pv->d << ' '; 

      pv = pv->next;} 

   cout << endl;

}

void List::print_back(){ 

   Node *pv = pend; 

   cout << endl << " list back: "; 

   while (pv){

      cout << pv->d << ' '; 

      pv = pv->prev;} 

   cout << endl;

}

Тізім деструкторы оның барлық элементтерінен жадыны босатады:



List::~List(){ 

   if (pbeg != 0){ 

      Node *pv = pbeg; 

      while (pv){

         pv = pv->next; 

         delete pbeg; 

         pbeg = pv;}

   }

}

Төменде 


List

 класын қолданатын программа мысалы көрсетілген. Про-

грамма 125 б. келтірілген программаға ұқсас: ол 5 саннан тұратын тізімді 

қалыптастырады, оны экранға шығарады, санды тізімге қосады, тізімнен сан-

ды өшіреді жəне оны қайтадан экранға шығарады:



232

int main(){ 

List L;

for (int i = 1; i<6; i++) L.add(i); 

L.print(); 

L.print_back(); 

L.insert(2, 200);

if (!L.remove(5)) cout << «not found»; 

L.print(); 

L.print_back();

}

List

 класы бүтін сандарды сақтауға арналған. Онда кез келген типтегі 

мəліметтерді сақтау үшін бұл класты шаблон ретінде сипаттап, типті параметр 

ретінде беру керек. 



Шаблонды сипаттау синтаксисі:

template <шаблон_параметрлерін_сипаттау> класс_анықтамасы;

Шаблонның параметрлері үтір арқылы бөліне отырып, тізбектеле жазыла-

ды. Параметрлер ретінде типтер, шаблондар жəне айнымалылар  қолданылуы 

мүмкін.  



Типтер стандартты немесе қолданушы анықтаған тип болуы мүмкін. 

Оларды сипаттау үшін



 class

 түйінді сөзі қолданылады. Шаблонның ішінде 

тип спецификациясын қолдануға болатын кез келген жерде тип параметрін 

пайдалануға болады, мысалы:



template class List{ 

   class Node{ 

      public: 

Data d; 

Node *next; 

Node *prev; 

Node(Data dat

 

=

 

0){d

 

=

 

dat; next

 

=

 

0; prev

 

=

 

0;}

   };

...

}

 

Data

 класын формалды параметр ретінде қарастыруға болады, компиля-

ция кезінде оның орнына нақты көрсетілген мəліметтер типі қойылады.

Шаблонның кез келген параметрлері үшін келісім бойынша мəндер 

тағайындауға болады, мысалы:



template class myarray { /* ... */ };

...

template

 

K,

 

class

 

V,

 

template

 

class

 

С

 

=

 

myarray> 

class Map{

C key;


233

C value;

...

};

Шаблон параметрінің əрекет ету аймағы оның сипатталу нүктесінен бастап 

шаблонның соңына дейінгі кеңістік болады, сондықтан параметрді одан кейін 

орналасқан параметрлерді сипаттау кезінде де қолдануға болады, мысалы:



template class X { /*...*/};

Класс шаблонының əдістері автоматты түрде функция шаблондарына ай-

налады. Егер əдіс шаблоннан тыс сипатталса, онда оның тақырыбында келесі 

элементтер болуы тиіс: 



template <шаблон_параметрлерінің_сипаттамасы>

қайт_тип класс_атауы <шаблон_параметрлері >:: 

функция_атауы (функцияның параметрлер_тізімі)

Функцияның тақырыбындағы шаблон параметрлерінің сипаттамасы 

 

класс шаблонына сəйкес болуы керек, мұнда параметрлердің атаулары бірдей 



болмауы мүмкін. Шаблон əдістерінің сипатталу синтаксисін мысал арқылы 

қарастырған жеңіл болады:



template void List::print() 

   { /* функция тұлғасы */ }

Мұндағы 


 – шаблон параметрінің сипаттамасы, 



void

 – 


функцияның қайтаратын мəнінің типі, 

List

 – класс атауы



 – шаблон 

параметрі, 

print

 – параметрлерсіз функцияның атауы.

Бірнеше параметр болған жағдайда 

параметрлер_сипаттамасындағы

 

жəне 



шаблон_параметрлеріндегі

 олардың орналасу реттілігі бірдей болуы 

керек, мысалы:

template

 

class T2> struct A{ 

   void fl ();

};

template void A::f1(){...}

Төменде шаблондарды сипаттау ережелері көрсетілген.

□  Жергілікті кластар шаблондарды өздерінің элементтері ретінде  кабыл-

дай алмайды.

□  Əдістердің шаблондары виртуалды бола алмайды.

□  Класс шаблондарында статикалық элементтер, достас функциялар 

жəне кластар болуы мүмкін.

□  Шаблондар басқа шаблондардан немесе қарапайым кластардан туынды 

болып, сонымен қатар шаблондар мен қарапайым кластар үшін базалық 

болуы да мүмкін. 

□ Шаблон 

ішінде 


friend

-шаблондарды анықтауға болмайды.




234

Шаблонның мысалы ретінде 



List

 екібайланысты тізімінің параметрлен-



ген класының толық сипаттамасын қарастырайық. 



Достарыңызбен бөлісу:
1   ...   322   323   324   325   326   327   328   329   ...   642




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

    Басты бет