10.07.2015 Views

2× DVD - Vitajte na stránkach www.einsty.hostujem.sk

2× DVD - Vitajte na stránkach www.einsty.hostujem.sk

2× DVD - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M EC++ pod Windows / 18. èas: KolekcieRok 2002 sa u stal realitou. Zase nám bude pár týdòovtrva, ne prestaneme <strong>na</strong> dokumnety písa „01“ èi „2001“a „zosynchronizujeme sa s <strong>na</strong>šou èasovou osou“, ako bypovedal nejeden fanúšik sci−fi. Dúfam, e ste Silvestrapreili bez ujmy <strong>na</strong> zdraví a zaèali s ve¾kým odhodlanímplni novoroèné predsavzatia (moment, ko¾kého e dnesmáme? Okolo 10. januára? Tak to hej, to sa predsavzatiaešte plnia ☺).Medzi <strong>na</strong>jvýz<strong>na</strong>mnejšie udalosti roku 2002 bude pre WINprogramátor<strong>sk</strong>ý svet predstavova uvo¾nenie novej verzieMicrosoft Visual Studia – Visual Studio NET (ohlásené <strong>na</strong> 13.februára) a následný boom „NET aplikácií“, ktoré po jehouvedení zaplavia softvérový trh. Som ve¾mi zvedavý, ako samu bude dari. Ide toti <strong>sk</strong>ôr o úplne nový produkt ako opokraèovanie. Microsoft sa rozhodol pre pouitie minimakódu zo starého VStudia a takmer všetko sa písalo <strong>na</strong>novo(predsa len je VS 6.0 u tamer štyri roky starý a jeho jadronebolo príliš vhodné <strong>na</strong> zakomponovanie všetkých nových„features“). Uvidíme teda, ako si NET poradí s existujúcoukonkurenciou, kadopádne mu treba dra palce.Seriál a do svojho konca zostane pri Visual Studiu 6.0,azda niekedy v poslednej èasti si opíšeme <strong>na</strong>jdôleitejšieèrty jeho novej verzie.Touto èasou sa opä vraciame ku klasickému výkladu,ktorý sme <strong>na</strong> mesiac prerušili. Preberieme si ve¾mi dôleitúa rozsiahlu problematiku kolekcií (Collections).COLLECTIONS. Oz<strong>na</strong>èenie „kolekcia“ sa nepouívalen v súvislosti s Vianocami, ale predstavuje aj dôleitúsúèas kninice MFC. Aby ste si pod týmto pojmomnepredstavovali nieèo zloité a ktovieako abstraktné,staèí si uvedomi, e kolekciu tvorí <strong>sk</strong>upi<strong>na</strong> objektov (daloby sa poveda aj pole objektov, ale pre kolekcie má poleosobitný výz<strong>na</strong>m, preto ostaneme pri oz<strong>na</strong>èení <strong>sk</strong>upi<strong>na</strong>objektov). Kolekcia je sama osebe takisto objektom, ktorýmôe uchováva nejaké dáta, resp. ako sme u povedali, ajiné objekty. Kolekcie sa vo všeobecnosti delia pod¾a dvochkritéríí. Pod¾a svojej vnútornej štruktúry (angl. shape), kto−rá urèuje, ako sú dáta/objekty v kolekcii usporiadané. Dru−hé kritérium rozde¾uje kolekcie pod¾a tried kolekcií MFC.Pod¾a vnútornej štruktúry rozlišujeme kolekcie: List,Array a Map (zoz<strong>na</strong>m, pole a mapa).List – predstavuje usporiadaný, neindexovaný zoz<strong>na</strong>m prv−kov. Má svoj zaèiatok (oz<strong>na</strong>èovaný head) a koniec (tail).Vyz<strong>na</strong>èuje sa hlavne svojou rýchlosou pri vkladaní/od−straòovaní prvkov.Array – predstavuje usporiadané, indexované pole objek−tov (indexy môu by len celoèíselné hodnoty). Podobá saklasickému po¾u elementárnych prvkov.Map – <strong>na</strong> prvý poh¾ad <strong>na</strong>jkomplikovanejší, ale ne<strong>na</strong>hradi−te¾ný typ kolekcie, ktorý nejakému k¾úèovému objektu pri−raïuje objekt s hodnotou. Tento typ kolekcie sa zvykneoz<strong>na</strong>èova aj ako slovník.Porov<strong>na</strong>nie vlastností typov kolekcií vidíte v tab. 1.Z poh¾adu MFC existujú tri typy tried kolekcií, prièom vkadej <strong>sk</strong>upine existujú triedy, ktoré pracujú s kolekciamitypu List, Array a Map (pozri tab. 2 a tab. 3). Rozlišujemeteda:1. triedy kolekcií zaloené <strong>na</strong> šabló<strong>na</strong>ch jazyka C++,zaloené <strong>na</strong> kolekciách objektov rôznych typov (tab. 2),2. triedy kolekcií zaloené <strong>na</strong> šabló<strong>na</strong>ch jazyka C++,zaloené <strong>na</strong> kolekciách typovo bezpeèných ukazovate¾ov<strong>na</strong> objekty rôznych typov (tab. 2),3. triedy kolekcií, ktoré nie sú zaloené <strong>na</strong> šabló<strong>na</strong>ch jazy−ka C++ (tab. 3).Tieto triedy sa ešte ïalej môu deli <strong>na</strong> triedy, ktoré súserializovate¾né, triedy, ktoré podporujú dumpovanie, atriedy, ktoré sú typovo bezpeèné. V súèasnosti sa odpo−rúèa vyuíva triedy zaloené <strong>na</strong> šabló<strong>na</strong>ch C++, jed<strong>na</strong>ksú novšie a viacobjektové, jed<strong>na</strong>k sú typovo bezpeèné(type−safe). Samozrejme, niè vám nebráni pouívanešablónové triedy.Ïalšie informácie o týchto triedach nájdete v helpe.PREDPRÍPRAVA NA PRÍKLADY. Aby sme siukázali opä nieèo nové v prostredí Visual C++, <strong>na</strong>sledu−júci príklad + všetky úlohy, ktoré si budete doma <strong>sk</strong>úša,si ulote do jedného Workspace (pracovného prostredia).V praxi sa podobný postup vyuíva ve¾mi èasto, pretobude dobré, ak si ho osvojíte a zaènete aktívne pouíva(<strong>na</strong>vrhujem vám <strong>na</strong>pr. všetky príklady z jednej èasti seriá−lu udrova v samostatných pracovných prostrediach). Zmenu File vyberte New, kliknite <strong>na</strong> kartu Workspaces avyberte Blank Workspace. Do textového po¾a Workspace<strong>na</strong>me <strong>na</strong>píšte Collections a potvrïte (OK). Teraz mámevytvorené èisté pracovné prostredie a doò budemepostupne pridáva jednotlivé projekty.PRÍKLAD – POUITIE CTypedPtrList. Vpríklade si ukáeme pouitie kolekcie typu List s pomocou<strong>na</strong> šablóne zaloenej triedy MFC CTypedPtrList, ktorá „ucho−váva“ objekty ukazovate¾ov <strong>na</strong> nejakú triedu (resp. objekt).Za predpokladu, e máte otvorené Workspace Collections,vytvorte nový projekt typu Win32 Console Application spodporou MFC (pozri predchádzajúcu èas). Vloenie tohtoprojektu do Workspace Collections zabezpeèíte tak, e <strong>na</strong>Typ kolekcie Usporiadané Indexované Vkladanie prvku H¾adanie Duplicitné prvkykonkrétneho prvkuList Áno Nie Rýchle Pomalé PodporujeArray Áno Áno (pod¾a celoèíselného indexu) Pomalé Pomalé PodporujeMap Nie Áno (pod¾a k¾úèa) Rýchle Rýchle K¾úèe nie, Hodnoty ánoTab. 1 Vlastnosti kolekcií pod¾a vnútornej štruktúry prvkovObsah kolekcie Triedy pre typ Triedy pre typ Triedy pre typkolekcie Array kolekcie List kolekcie MapKolekcia objektov rôznych typov CArray CList CMapKolekcia ukazovate¾ov <strong>na</strong> objekty rôznych typov CTypedPtrArray CTypedPtrList CTypedPtrMapTab. 2 Triedy kolekcií MFC zaloené <strong>na</strong> šabló<strong>na</strong>ch C++Triedy Triedy Triedypre typ kolekcie pre typ kolekcie pre typ kolekcieArray List MapCObArray CObList CMapPtrToWordCByteArray CPtrList CMapPtrToPtrCDWordArray CStringList CMapStringToObCPtrArrayCMapStringToPtrCStringArrayCMapStringToStringCWordArrayCMapWordToObCUIntArrayCMapWordToPtrTab. 3 Nešablónové triedy kolekcií MFCkarte výberu typu nového projektu oz<strong>na</strong>èíte Add to currentWorkspace (obr. 1). Meno projektu je: SimpleList.Ak všetko prebehlo bez problémov, vo WorkspaceCollections sa teraz <strong>na</strong>chádza jeden projekt SimpleList.Pomocou menu Insert−New Class vlote do tohto projektunovú triedu CSimpleListClass (potrebné údaje vidíte <strong>na</strong>obr. 2).Kód hlavièkového súboru triedy CSimpleListClassupravte takto:class CSimpleListClass : public CObject{// pre dumpingDECLARE_DYNAMIC(CSimpleListClass)public:CSimpleListClass(int nPoradie);virtual ~CSimpleListClass();void Dump(CDumpContext &dc) const;void PrintPoradie();private:int m_nPoradieObjektu;};V implementaènom súbore triedy CSimpleListClasszmeòte konštruktor a pridajte kód funkcie PrintPoradie aDump:CSimpleListClass::CSimpleListClass(int nPoradie){m_nPoradieObjektu=nPoradie;}void CSimpleListClass::PrintPoradie(){printf( Cislo objektu: %d\n , m_nPoradieObjektu);}void CSimpleListClass::Dump(CDumpContext &dc)const{CObject::Dump(dc);dc

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!