Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
Zaslal: 25. duben 2009, 21:36:01 Předmět: Cvičení v C++ |
|
|
Přihodilo se mi, že vedu vysokoškolské cvičení z programovaní v C++. Jaké příklady si myslíte, že je vhodné demonstrovat. Poznamenávám, že se jedná o studenty z nichž někteří předtím měli jen Pascal a žádný jiný jazyk neznají.
Prozatím jsem předváděl vstupně výstupní proudy na zjednodušené verzi unixového příkazu tail. Pak jsem implementoval dynamický seznam spolu s iterátorem ve stylu STL. Nyní se snažím implementovat hashovou tabulku. A v budoucnu uvažují o třídě pro počítání s velmi velkými přirozenými čísly.
Pokud máte nápad na nějaké příklady, které nejsou čistě umělé a ilustrují použití některých zákoutí C++, tak se prosím podělte  |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 25. duben 2009, 22:07:14 Předmět: |
|
|
Pokud nemaji zaklady z C, tak bych doporucoval procvicit ukazatelovou aritmetiku a dalsi pametove perverznosti. Celkove cviceni na spravu pameti (+ treba naznaky, jak tomu pomoct v C++ pocitanim referenci) by jim taky mohlo prospet. _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
Zaslal: 25. duben 2009, 22:26:13 Předmět: |
|
|
ondrasej:
meli predtim zaklady C, to jsem zapomnel napsat.
pod pocitanim referenci myslis ukazat automaticke ukazatele? |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 25. duben 2009, 22:33:03 Předmět: |
|
|
Jo, presne to.
Dalsi veci, co by se daly delat... trida na zlomky/komplexni cisla co se chova jako cislo. Urcite neco na dedicnost + vicenasobnou dedicnost. _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 25. duben 2009, 22:53:50 Předmět: |
|
|
Možná by nebylo na škodu zkusit implementovat vyjádření reálného čísla pomocí mantisy a exponentu se základem 10. (a*10^b) V nekritických výpočtech se tak dají docela dobře obejít některé nevýhody floatů. Práci s šablonama bych taky nepodceňoval. Zahrnul bych taky virtuální dědičnost (: virtual public třída).
Co tě přimělo cvičit C++? Mně bylo to samé nabízeno na FI MUNI, odmítl jsem.  _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
Zaslal: 26. duben 2009, 01:53:25 Předmět: |
|
|
Eosie napsal: |
Co tě přimělo cvičit C++? Mně bylo to samé nabízeno na FI MUNI, odmítl jsem.  |
Jako doktorand to mám povinné. Taky bych si raděj vybral jazyk, jehož specifikace se dá alespoň udržet v hlavě . Nemůžu přijít na rozumný případ na dědičnost, jediné co mě napadá je hierarchie výjimek. Natož najít příklad, kde by se využila několikanásobná dědičnost (podle mě je to zlo ) |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 26. duben 2009, 07:14:16 Předmět: |
|
|
Tu vicenasobnou dedicnost... treba ukazat, jak ji pouzit na tvorbu interface, pripadne na pridedovani funkcnosti do objektu. Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write). _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
MD

Založen: 29. 07. 2007 Příspěvky: 437 Bydliště: Praha
|
Zaslal: 26. duben 2009, 11:03:08 Předmět: |
|
|
Zase pozor, abys to neprekombinoval. Treba inteligentni tridou pro retezce se da zaplacnout klidne celej semestr
Kdybys chtel, muzu ti poslat jeden priklad (zdrojaky), ktery jsme delali na skoleni. Tehdy mi to prislo zajimavy, ted uz presne nevim, co vse jsme v tom kodu vytvorili. Je tam class factory, pak jakysi framework inspirovany MFC - aplikace, do ktere se pridavali prvky, ktere komunikovaly pomoci udalosti. Pak je tam jeste klasicky priklad na polymorfismus. Tak treba by sis z toho neco nasel. _________________ - play with objects - www.krkal.org - |
|
Návrat nahoru |
|
 |
Peta

Založen: 28. 07. 2007 Příspěvky: 154 Bydliště: V prvnim patre hned vedle koupelny.
|
Zaslal: 26. duben 2009, 11:42:04 Předmět: |
|
|
Zajímavé by mohlo být nějak šikovně implementovat třeba A* (nebo jiný prohledávací algoritmus)... modifikovatelná heuristika, genericita z hlediska uzlů a podobně. Tam bys určitě byl schopný naskládat spoustu OOP legrace  _________________ Když je Ti smutno, otoč se tváří ke slunci a všechny stíny padnou za Tebe. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 26. duben 2009, 11:44:20 Předmět: |
|
|
OndraSej napsal: |
Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write). |
Copy-on-write bych nedoporučoval, protože při více vláknech je to spíš nevýhoda a STL objekty (ani std::string) to nepoužívají ze stejného důvodu. Problémy s kopírováním a předáváním dobře řeší move semantics v C++0x (VC++ 2010). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 26. duben 2009, 11:47:53 Předmět: |
|
|
Eosie> Cilem neni naimplementovat dokonalou tridu na retezce, ale aby si zkusili, ze to jde i jinak a uvedomili si, na co vsechno musi myslet. _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
Zaslal: 26. duben 2009, 12:11:09 Předmět: |
|
|
OndraSej napsal: |
Tu vicenasobnou dedicnost... treba ukazat, jak ji pouzit na tvorbu interface, pripadne na pridedovani funkcnosti do objektu. Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write). |
Nejak moc nerozumim tomu vyuziti vicenasobne dedicnosti u interface. muzes to prosim vice rozvest? Na vetsinu komplikovanejsich komponent staci skladani. Dovedu si predstavit abstraktni tridy pro deklaraci rozhrani pro zpracovani udalosti, atd... Take si predstavit dedeni od vice rozhranich, ale nevidim duvod pro virtualni dedeni. (ve smyslu class B: public virtual A {}; ) |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 26. duben 2009, 13:53:00 Předmět: |
|
|
Nehledej v tom nic sloziteho Myslel jsem ukazat souvislost ciste abstraktnich trid a interface v Jave a ze interface muzes pridedit bez toho, aby se stalo neco oskliveho (a na druhou stranu, ze jsou tu urcite odlisnosti v tom, co kdy muzes dedit).
Jinak vicenasobnou + virtualni dedicnost ma smysl pouzit treba kdyz pomoci dedicnosti spojujes dva objekty se spolecnym predkem ktery obsahuje napriklad citac referenci a u ktereho rozhodne chces, aby se ve vysledne tride vyskytoval jenom jednou. _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 26. duben 2009, 15:02:17 Předmět: |
|
|
adragon> Zkus si v C++ implementovat tuto hierarchickou strukturu:
Nahoře předek, dole potomek.
Trida: {Metody}
Object: AddRef(), Release()
Input: Read(buffer, size)
Output: Write(buffer, size)
UnknownStream: IsOpen(), Close()
(nápověda: bez virtuální dědičnosti to nejde)
Virtuální dědičnost se hodí třeba v tomto případě, tj. rozdělení tříd na úzce specializované třídy a jejich sjednocování (aniž by se nějaká třída v některém potomkovi vyskytla 2x). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
adragon
Založen: 23. 08. 2007 Příspěvky: 72 Bydliště: Praha
|
Zaslal: 26. duben 2009, 16:11:18 Předmět: |
|
|
EOSIE:
Ja technicky rozumim k cemu je to dobre, ale ani tenhle priklad me nepresvedcuje o tom, ze je vhodne to pouzivat. Chtel bych ilustrovat mechanismy C++ na realnych prikladech (uznavam tenhle diamond se velmi podoba napr. implementaci standardnich proudu), ale uz neni videt, proc byla zvolena takova forma abstrakce.
Napr. pokud vyhodim UnknownStream, velmi se mi to zjednodusi stejne tak pocitani referenci bych nenechal na objektu, ale na objektu automatickeho ukazatele. Me se jevi takhle komplikovany design proste spatny, pokud neexistuji velmi vazne duvody pro jeho prosazovani. |
|
Návrat nahoru |
|
 |
|