<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>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ší.</p>
<p>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 ... .</p>
<p>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.<br>
</p>
<p>Jirka<br>
</p>
<div class="moz-cite-prefix">Dne 01.04.2021 v 6:38 Pavel Brychta
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:8851e197-876c-c898-9285-003ecb89bb7d@duhasys.eu">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p>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...<br>
</p>
<p>Pavel Brychta<br>
</p>
<div class="moz-cite-prefix">Dne 31. 03. 21 v 19:36 Pavel Hudecek
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:6E.S7hUJ.5R5Te5PMCfc.1WPBCp@seznam.cz">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}.MsoChpDefault
{mso-style-type:export-only;}div.WordSection1
{page:WordSection1;}</style>
<div class="WordSection1">
<p class="MsoNormal">Každý „úhel pohledu“, alias programovací
technika je vhodný pro jiné účely. Pro matematické operace
je to celkem jedno, jen je jasné, že </p>
<p class="MsoNormal">X = (4+a/1280)*b<span lang="EN-US">^3<o:p></o:p></span></p>
<p class="MsoNormal">je poněkud přehlednější než 50 řádků kódu
v assembleru a poněkud snadněji se to bude upravovat.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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.</p>
<p class="MsoNormal">Takže místo deklarace</p>
<p class="MsoNormal">Int hracX, hracY, hracZ, …</p>
<p class="MsoNormal">Int breberaciX<span lang="EN-US">[10],
breberaciY[10], …<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Ud</span>ěláme
strukturu</p>
<p class="MsoNormal">Typedef struct tObjekt <span
lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> Int x,
y, z, …<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">A potom deklaruju:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">tObjekt hrac<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">tObjekt breberaci[10]</span></p>
<p class="MsoNormal">a pak budu pracovat s hrac.x, breberaci<span
lang="EN-US">[6].y, … a bude to mnohem j</span>asně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>
<p class="MsoNormal">přičemž 2 je druhá zbraň z inventáře a
zbytek vektor směru.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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í.</p>
<p class="MsoNormal">Takže máme hrac.poloha.x, ale to X nás už
většinou nezajímá. My třeba napíšeme:</p>
<p class="MsoNormal">If (vzdalenost(hrac.poloha, breberaci<span
lang="EN-US">[5]</span>.poloha) <span lang="EN-US"><</span><span
lang="EN-US"> </span>breberaci<span lang="EN-US">[5]</span>.plamen.dosah)</p>
<p class="MsoNormal">{</p>
<p class="MsoNormal">hrac.poskodit(breberaci<span lang="EN-US">[5].plamen</span>.dmgPerSec).</p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Tak jsme se dostali ke
struktu</span>rálnímu programování.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">A v případě C++ nám z pod klávesnice
vylez ještě jeden termit jménem přetěžování operátorů.</p>
<p class="MsoNormal">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.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Když už jsme u toho, ví tu někdo, proč se
to menuje zrovna přetěžování?</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">PH</p>
<p class="MsoNormal"><o:p> </o:p><br>
</p>
</div>
</blockquote>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2">
<br /><br />
<hr style='border:none; color:#909090; background-color:#B0B0B0; height: 1px; width: 99%;' />
<table style='border-collapse:collapse;border:none;'>
<tr>
<td style='border:none;padding:0px 15px 0px 8px'>
<a href="http://www.avg.com/internet-security">
<img border=0 src="http://static.avast.com/emails/avg-mail-stamp.png" alt="Logo AVG" />
</a>
</td>
<td>
<p style='color:#3d4d5a; font-family:"Calibri","Verdana","Arial","Helvetica"; font-size:12pt;'>
Tento e-mail byl zkontrolován na viry antivirovým softwarem AVG.
<br><a href="http://www.avg.com/internet-security">www.avg.cz</a>
</p>
</td>
</tr>
</table>
<br />
<a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"> </a></div></body>
</html>