Konštruktor
Reťazce, ktoré inicializujeme s pomocou string knižnice, sú objekty. Objekty sú hlavnou súčasťou objektovo-orientovaného prístupu k programovaniu. Zatiaľ sme sa k tomúto prístupu nedospeli, takže vám stačí vedieť, že konštruktor je pri zrode objektu a poskytne objektu nejaké vlastností. Preto je konštruktor dôležitý, lebo určuje podobu samotného objektu.
Stále sme deklarovali reťazec takto:
string retazec;
Pri tomto deklárovaní získame konštruktor, ktorý nám vyhotoví prázdny reťazec s nulovou dĺžkou. Ak chceme prázdny reťazec deklarovať cez konštruktor s pridaním klasických zátvoriek (), urobíme to takto:
string retazec (""); // prázdny reťazec
1. príklad:
#include <iostream> // hlavičkové súbory #include <string> using namespace std; // priestor mien int main() // hlavna funkcia main { string retazec = "Vstal som a uvidel som na nocnej oblohe Zornicu. Tak volame Venusu ked je viditelna rano!"; string retazec1 (""); retazec1 = retazec; cout << retazec1; return 0; // koniec programu }
Výsledok programu:
Vstal som a uvidel som na nocnej oblohe Zornicu. Tak volame Venusu ked je vidite lna rano!
Ukážme si v pár príkladoch, čo všetko môžeme napchať do konštruktora.
2. príklad:
#include <iostream> // hlavičkové súbory #include <string> using namespace std; // priestor mien int main() // hlavna funkcia main { string retazec = "Chyba mi jarna rosa rano, po ktorej som chodil bosy. Tak na druhy rok moja mila jar."; string retazec1 (retazec); // 1.spôsob cout << retazec1 <<"\n"; string retazec2 = "Zmizla si z mojho zivota, navzdy kraska. Co uz, zeny su ako vlaky, prichadzaju a odchadzaju :)"; string retazec3 (retazec2, 33, 6); // 2.spôsob cout << retazec3 <<"\n"; string retazec4 ("Tento sposob inicializacie uz poznate ;)"); // bez komentára ;) cout << retazec4 << "\n"; string retazec5 ("Uff ale vonku prsi, este ze k nam nedojde hurikan Irma!", 3); // 3.spôsob cout << retazec5 << "\n"; string retazec6 = "Zaspal som nudou awh "; string retazec7 (7, 'z'); // 4.spôsob retazec6 += retazec7; cout << retazec6 << "\n"; string retazec8 (1, 79); // 5.spôsob string retazec9 (9, 111); // 5.spôsob string retazec10 = retazec8 + retazec9 + " prekvapil si ma!"; cout << retazec10 << "\n"; string retazec11 = "Najdi magicke slovo a je to coca-cola. Gratulka vyhravas prvu cenu a to listok na film s Angelina Jolie!"; string retazec12 (retazec11.begin()+ 28, retazec11.begin()+37); // 6.spôsob cout << retazec12; return 0; // koniec programu }
Výsledok programu:
Chyba mi jarna rosa rano, po ktorej som chodil bosy. Tak na druhy rok moja mila jar. kraska Tento sposob inicializacie uz poznate ;) Uff Zaspal som nudou awh zzzzzzz Oooooooooo prekvapil si ma! coca-cola
Rozbor programu:
V kóde som pre lepšie vysvetlenie rozdelil spôsoby deklarácie konštruktorov.
1. spôsob: v argumente konštruktora dávame reťazec a jednoducho sa skopíruje do inicializovaného reťazca
2. spôsob: prvý argument je jasný, v druhom argumente dávame pozíciu v reťazci, od ktorej máme záujem kopírovať znaky do nového reťazca. Tretím argumentom definujeme počet znakov, ktoré sa majú skopírovať od zvolenej pozícii v druhom argumente
3. spôsob: prvý argument je vybraný reťazec a druhý argument vyjadruje počet znakov od nultej pozícii, ktoré sa majú skopírovať do nového reťazca
4. spôsob: naplní 7 znakov z
5. spôsob: podobne ako v 4. spôsobe, len znak nedefinujeme klasický, ale ako ASCII kód
6. spôsob: má dočinenia s iterátormi, prvý argument vyjadruje začiatočnú pozíciu a druhý argument konečnú pozíciu.