cpp_is_not_c
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| cpp_is_not_c [2016/05/11 10:53] – [přetypování] djbuldog | cpp_is_not_c [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 17: | Řádek 17: | ||
| * V C++ [[http:// | * V C++ [[http:// | ||
| - | * 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, .. | + | |
| * 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, .. | + | |
| * 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 | + | |
| * 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ý '' | * navíc ještě pomocný '' | ||
| + | |||
| + | ===== buffer a struktury ==== | ||
| + | |||
| + | * v C se na řetězce používaly pole znaků, C++ má pohodlný '' | ||
| + | * 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 '' | ||
| + | <code cpp> | ||
| + | struct record { | ||
| + | int age; | ||
| + | int height; | ||
| + | } | ||
| + | |||
| + | vector< | ||
| + | struct record *r = reinterpret_cast< | ||
| + | </ | ||
| + | |||
cpp_is_not_c.1462956829.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
