Re: Ukazka C++ pro děti

Jiří Nesvacil nesvacil na posys.eu
Čtvrtek Duben 1 08:20:40 CEST 2021


Templates jsou užitečné. Přetížení operátorů chápu za nešvar. Pokud je 
na tom něco založeno, tak Ano. Vždycky se to dá přepsat přes metodu Add 
a je to čitelnější.

Obecně co je v novějším jazyku podpořeno je automatická likvidace paměti 
např. ten string, který se jinak v C špatně dělá. Pro embedded je to 
ovšem skoro špatně, tak si to chcete spíš více hlídat, teda pokud nemáte 
hodně paměti ... .

Pokud se ten kód má udržovat nebo myslet na to, že se přepíše i do 
jiného jazyku, tak se zkoumá, která vlastnost jazyku se dá využít a 
přenésti jinam.

Jirka

Dne 01.04.2021 v 6:38 Pavel Brychta napsal(a):
>
> Když už jsme se dostali k přetěžování operátorů, tak by bylo dobré 
> zmínit i šablony (templates), které s přetížením můžou souviset a 
> umožní vytvořit konverze mezi jednotlivými datovými typy. No a odtud 
> je pak už jen krůček k polymorfním objektům, které, jak jsem se zde 
> dozvěděl, by měly na 8-bitech "vadit", což považuji za blábol, protože 
> je běžně používám a paradoxně paměť RAM jejich použitím spíš šetřím 
> (asi to používám "v míře menší, než zanedbatelné", nebo to prostě to 
> AVRko neví, tak mu to nevadí). V každém případě mi právě polymorfní 
> objekty v praxi pomohly pár věcí vyřešit hodně elegantní cestou, takže 
> bych je neopomenul zmínit...
>
> Pavel Brychta
>
> Dne 31. 03. 21 v 19:36 Pavel Hudecek napsal(a):
>>
>> Každý „úhel pohledu“, alias programovací technika je vhodný pro jiné 
>> účely. Pro matematické operace je to celkem jedno, jen je jasné, že
>>
>> X = (4+a/1280)*b^3
>>
>> je poněkud přehlednější než 50 řádků kódu v assembleru a poněkud 
>> snadněji se to bude upravovat.
>>
>> Jiná věc je, když ten výpočet bude třeba součástí hry. Místo X pak 
>> bude třeba hracX a ten bude mít ještě Y, Z, dva úhly kam kouká, 3 
>> složky vektoru pohybu, zdraví, počet nábojů, … a pak tam budou ještě 
>> potvoráci a ti mají podobné vlastnosti.
>>
>> Snadno dojdeme k tomu, že než vytvářet 30 proměnných s názvem 
>> začínajícím hrac a 30 polí pro všechny breberáky, bude lepší udělat 
>> nějakou strukturu, která popisuje, jaký všechny vlastnosti může mít 
>> aktivní objekt v tý hře a všechny hráče a breberáky pak udělat podle něj.
>>
>> Takže místo deklarace
>>
>> Int hracX, hracY, hracZ, …
>>
>> Int breberaciX[10], breberaciY[10], …
>>
>> Uděláme strukturu
>>
>> Typedef struct tObjekt {
>>
>>                 Int x, y, z, …
>>
>> }
>>
>> A potom deklaruju:
>>
>> tObjekt hrac
>>
>> tObjekt breberaci[10]
>>
>> a pak budu pracovat s hrac.x, breberaci[6].y, … a bude to mnohem 
>> jasnější, protože seznam těch vlastnstí je na jednom místě. Jelikož C 
>> má i poitery na funkce, můžu si do tý struktury přidat i funkce a tak 
>> když hráč zmáčkne fire, vyvolá něco jako hrac.strilet(2,125,38,64)
>>
>> přičemž 2 je druhá zbraň z inventáře a zbytek vektor směru.
>>
>> Už tady začíná být jasné, že by to možná chtělo víc úrovní struktur, 
>> takže poloha bude třeba ve struktuře tXYZ, která obsahuje x,y,z. 
>> Takže pak můžu mít funkci, která má parametry tohoto typu, či takový 
>> typ vrací.
>>
>> Takže máme hrac.poloha.x, ale to X nás už většinou nezajímá. My třeba 
>> napíšeme:
>>
>> If (vzdalenost(hrac.poloha, breberaci[5].poloha) 
>> <breberaci[5].plamen.dosah)
>>
>> {
>>
>> hrac.poskodit(breberaci[5].plamen.dmgPerSec).
>>
>> }
>>
>> Tak jsme se dostali ke strukturálnímu programování.
>>
>> No ale hra je rozsáhlá, takže jí programuje 15 lidí a můžou vznikat 
>> zmatky. Proto místo místo struktury použijeme objekt, což znamená, že 
>> místo struct bude class a jinak je všechno stejný. Teda až na to, že 
>> v class můžou bejt sekce public, private, protected, friend a možná 
>> ještě něco. A já, jako autor toho class nadefinuju, který věci mám 
>> svoje a zvenku nejsou vidět, tudíž do nich kolega omylem nezasáhne a 
>> do jakých může zasahovat okolí apod.
>>
>> A v případě C++ nám z pod klávesnice vylez ještě jeden termit jménem 
>> přetěžování operátorů.
>>
>> Pro class vektor si můžu nedefinovat, jak vypadají operace 
>> odpovídající běžným operátorům, takže když hráč vyleze na žebřík, 
>> nastane hrac.poloha = hrac.poloha+zebrik.vektor.
>>
>> Když už jsme u toho, ví tu někdo, proč se to menuje zrovna přetěžování?
>>
>> PH
>>
>>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Tento e-mail byl zkontrolován na viry programem AVG.
http://www.avg.cz
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210401/fa56850b/attachment.html>


Další informace o konferenci Hw-list