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