<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>