Uživatelské nástroje

Nástroje pro tento web


cpp_is_not_c

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
cpp_is_not_c [2016/05/11 10:54] – [přetypování] djbuldogcpp_is_not_c [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 17: Řádek 17:
  
   * V C++ [[http://www.cplusplus.com/doc/tutorial/typecasting/|se používá]]   * V C++ [[http://www.cplusplus.com/doc/tutorial/typecasting/|se používá]]
-    * *dynamic_cast* - pouze pro ukazatele na třídy nebo void*+    **dynamic_cast** - pouze pro ukazatele na třídy nebo void*
       * dynamicky (za běhu) - navíc kontrola při runtime       * dynamicky (za běhu) - navíc kontrola při runtime
       * upcast - přetypování potomka na rodičovskou třídu       * upcast - přetypování potomka na rodičovskou třídu
       * downcast - přetypování rodičovské na potomka (jen pokud základní třída umí vše co potomek - virtuální metody)       * downcast - přetypování rodičovské na potomka (jen pokud základní třída umí vše co potomek - virtuální metody)
-    * *static_cast* - pro ukazatele, enum, číselné typy, ..+    **static_cast** - pro ukazatele, enum, číselné typy, ..
       * staticky (během kompilace) - může způsobit runtime error, správnost je na programátorovi       * staticky (během kompilace) - může způsobit runtime error, správnost je na programátorovi
       * u tříd umožňuje upcast, downcast (základní třída zde nemusí mít vše co potomek)       * u tříd umožňuje upcast, downcast (základní třída zde nemusí mít vše co potomek)
       * nelze ale přetypovat ukazatel na dvě úplně odlišné třídy       * nelze ale přetypovat ukazatel na dvě úplně odlišné třídy
-    * *reinterpret_cast* - jakýkoliv ukazatel na jakýkoliv, převod čísla na ukazatel, ..+    **reinterpret_cast** - jakýkoliv ukazatel na jakýkoliv, převod čísla na ukazatel, ..
       * neprovadí se kontroly, hodnota se prostě zkopíruje       * neprovadí se kontroly, hodnota se prostě zkopíruje
-    * *const_cast* - přetypování const na ne-const typ+    **const_cast** - přetypování const na ne-const typ
       * například pokud víme, že budeme jen číst, ale proměnnou nemáme const       * například pokud víme, že budeme jen číst, ale proměnnou nemáme const
   * navíc ještě pomocný ''typeid'', pro porovnávání typů   * navíc ještě pomocný ''typeid'', pro porovnávání typů
 +
 +===== buffer a struktury ====
 +
 +  * v C se na řetězce používaly pole znaků, C++ má pohodlný ''string''
 +  * jak ale v C++ udělat buffer, do kterého bychom mohli namapovat například strukturu?
 +  * místo pole znaků by se měl používat ''vector<char>''
 +<code cpp>
 +struct record {
 +  int age;
 +  int height;
 +}
 +
 +vector<char> buffer(sizeof(struct record));
 +struct record *r = reinterpret_cast<struct record*>(buffer.data());
 +</code>
 +
cpp_is_not_c.1462956857.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki