Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilStanislava Veselá
1
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka
2
Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které se liší v datových typech nebo hodnotách konstant ► takto vytvořené funkce nebo třídy označujeme jako instance šablony
3
Deklarace šablony ► template deklarace; ► template je klíčové slovo ► seznam_parametru je seznam formálních parametrů ► deklarace je deklarace funkce, metody, objektu, datové složky objektu…
4
Parametry šablon ► class test ► class test = int ► typename test ► typename test = float ► template class test1 ► template class test1=sabl
5
Šablony funkcí template typ jmeno (seznam_parametru_fce ) { // tělo fce };
6
Příklad na šablony funkcí template void prohod(X &a, X &b) //šablona funkce { X pom; //X je vlastníkem prostoru pom = a; // vloží a do pom a = b; //prohodí b do a b = pom; //vloží do b hodnotu z pom } int main() { int i=100, j=200; float x=100.1, y=200.3; prohod(i, j); // prohodí čísla typu integer prohod(x, y); // prohodí čísla typu float cout << "Prohozna cela cisla jsou i, j: " << i << ' ' << j << endl; cout << " Prohozna realna cisla jsou x, y: " << x << ' ' << y << endl; return 0; }
7
Šablony objektových typů template klíč jméno { telo }; ► ► klíč je buď class, struct nebo union
8
Příklad na šablony objektových typů template class mojetrida { T1 i; T2 j; public: mojetrida(T1 a, T2 b) { i = a; j = b; } void vypis() { cout << i << ' ' << j << '\n'; } }; int main() { mojetrida o1(100, 0.123); mojetrida o2('A', "tohle je kratka veta."); o1.vypis(); // vypíše int, double o2.vypis(); // vypíše char, char * return 0; }
9
Rekurze a šablony template // Primární šablona struct suma // pro n > 0 { enum{ vysledek=n+suma ::vysledek }; enum{ vysledek=n+suma ::vysledek };}; template<> // Specializace pro n == 0 struct suma // ukončuje rekurzi { enum{ vysledek=0 }; enum{ vysledek=0 };}; int main(int argc, char* argv[]) { suma i; suma i; cout << i.vysledek << endl; cout << i.vysledek << endl; getchar(); getchar(); return 0; return 0;}
10
Zadání cvičení ► Napište šablonu třídy LIFO, která bude sloužit jako univerzální zásobník last-in-first-out. Bude obsahovat konstruktor s jedním parametrem definujícím hloubku zásobníku, metodu pro přidání prvku, pro odebrání prvku, pro zjištění počtu prvků v zásobníku. V programu vyzkoušejte funkčnosti instance šablony na prvcích typu int, float, char, char* ► program umístěte do samostatného hlavičkového souboru, nakreslete vývojový diagram ► ► použití nového „cout <<“ místo „printf()“ ► bodování: funkce (1 bod), rychlost (1 bod), stabilita a délka prog. (1 bod), implementace v hl. souboru (1 bod)
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.