Programování v jazyce C++

Slides:



Advertisements
Podobné prezentace
Mgr. Irena Fadrhoncová.  Definice: právní norma je obecně závazné pravidlo chování, které je vyjádřeno zvláštní státem uznanou formou a jehož zachování.
Advertisements

Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
CorelDRAW – dodatky (19). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně.
Pojem a význam práva Souhrn norem, stanovených uznaných státem k dosažení určitých společenských účelů, jejichž zachování je vynucováno státní mocí Objektivní.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Experimentální metody oboru – Pokročilá tenzometrie – Měření vnitřního pnutí Další využití tenzometrie Měření vnitřního pnutí © doc. Ing. Zdeněk Folta,
Programování v jazyce C++ Dědičnost a polymorfismus.
IP adresace (IPv4) Velikost a určení IP adresy I. Epocha (dělení na třídy) II. Epocha (zavedení masky) Speciální adresy Příklady a řešení IP adres Souhrn.
Autor:Ing. Pavel Brož Předmět/vzdělávací oblast:Informační a komunikační technologie Tematická oblast:Práce se standardním aplikačním programovým vybavením.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Funkce Lineární funkce a její vlastnosti 2. Funkce − definice Funkce je předpis, který každému číslu z definičního oboru, který je podmnožinou množiny.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 10: Tvorba vlastních funkcí Bc. Radek Libovický.
Autentizace předmětem
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Výukový materiál Zpracovaný v rámci projektu EU peníze školám
Nadpis prezentace Zdeněk Tišl
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Pojem přeměna obchodní společnosti
Mocniny, odmocniny, úpravy algebraických výrazů
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 1 – Množiny – teorie
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Přetěžování Datové typy.
Název projektu: Moderní výuka s využitím ICT
Programování v jazyce C++
Abstraktní datové typy
Struktury.
Excel – tabulkový procesor
Jednotné principy klasifikace na GJKT
Databáze MS ACCESS 2010.
Základní jednorozměrné geometrické útvary
ROZVRHOVÁNÍ SLUŽEB VE ZDRAVOTNICKÉM ZAŘÍZENÍ
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
C# konzole – Program emoce
Datové typy v jazyce C Datové typy void skalární aritmetické
Abstract Factory.
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,
Lexikální atomy jazyka C
Běžné reprezentace grafu
Název školy: Základní škola a mateřská škola Uhřice, okres Hodonín
Poměr v základním tvaru.
Rozpisy témat a odevzdávárny
Překladače 6. Sémantická analýza
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Kvadratické nerovnice
Programování (14PRG) 1. cvičení.
GDPR: ochrana osobních údajů
Rovnice základní pojmy.
Rovnice s absolutními hodnotami
© 2012 STÁTNÍ ÚSTAV PRO KONTROLU LÉČIV
Bibliografické odkazy a citace změny oproti starší verzi normy ISO ČSN 690 Mgr. Zdeňka Firstová Univerzitní knihovna ZČU v Plzni
Čím vším se řídí reklama pro odborníky
Remote login.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Teorie chyb a vyrovnávací počet 1
Datové typy v jazyce C Datové typy void skalární aritmetické
Poměr v základním tvaru.
Lineární funkce a její vlastnosti
Algoritmizace a datové struktury (14ASD)
Grafy kvadratických funkcí
Hromadné dokumenty opakující se pro kolekci osob
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Slovní úlohy o společné práci − 3
Union neboli sjednocení Bitová pole
Class Diagrams.
Tečné a normálové zrychlení
Transkript prezentace:

Programování v jazyce C++ Přetěžování operátorů

Opakování princip dědičnosti, nastavení přístupových práv, konstruktory a destruktory odvozených tříd, virtuální dědičnost, polymorfismus, časná vs. pozdní vazba, virtuální metody,

Abstraktní třídy slouží pro implementaci obecného předka dalších tříd, některé metody takovéhoto předka nemá smysl definovat: takováto metoda je označena jako virtuální a místo těla má řetězec "=0;", takováto metoda se nazývá čistě virtuální, nesmí být vytvořena instance abstraktní třídy, pointer nebo reference však ano.

Třídní ukazatele v C++ je možno získat adresu na libovolnou složku i metodu, k tomu slouží třídní ukazatele, int trida::*slozka; int (trida::*metoda)(parametry); dereference je možná vzhledem ke konkrétní instanci, k přístupu ke složkám a metodám se pak používají operátory .* a ->*.

Statické datové položky třídy je-li datová položka statická, pak je společná pro všechny instance třídy, existuje i před vznikem první a zánikem poslední instance, mimo třídu je lze kvantifikovat názvem třídy nebo názvem libovolné instance, pro třídu používáme operátor ::, pro instance operátor . nebo ->,

Statické metody mohou být volány bez odkazu na konkrétní instanci, možnost jejich použití opět není vázána na existenci instance, obecně smí použít pouze statická data: chci-li používat nestatická, musím danou instanci předat jako parametr, neexistuje v nich identifikátor this.

Možnosti přetěžování operátorů nelze změnit prioritu, asociativitu, počet operátorů a způsob zápisu, nelze definovat nové operátory, nelze definovat implicitní hodnoty parametrů, nelze změnit význam pro standardní typy, není předepsán typ vrácené hodnoty ani parametrů, jednotlivé verze musí být rozlišitelné podle operandů.

Co lze či nelze přetížit ., .*, ::, ?:, sizeof, #, ##, static_cast, dynamic_cast, reinterpret_cast, const_cast =, (), [], -> a (typ) lze přetěžovat pouze jako nestatické, new a delete lze přetěžovat podle zvláštních pravidel, ostatní operátory je možné přetěžovat libovolně.

Principy přetěžování operátorů přetížení operátoru + spočívá v definici funkce či metody operator+(), podobně pro ostatní operátory, operátory lze přetěžovat jako metody nebo jako funkce s minimálně jedním operandem, přetížený binární operátor + můžeme volat zápisy: c = a + b; c = operator+ (a, b);

Polymorfismus definujeme-li operátor jako metodu, pak je polymorfní vzhledem k levému operandu, polymorfismus dle pravého operandu se dá zařídit pomocí přetížení: někdy příliš komplikované, druhou možností je vytvořit operátor pro společného předka tak, aby volal virtuální metodu pravého operátoru, která zařídí, co se od parametru očekává.

Přetěžování unárních operátorů definujeme-li unární operátor jako metodu, nesmí mít parametry, definujeme-li jej jako funkci, musí mít jeden parametr, postfixové operátory ++ a -- se deklarují s jedním parametrem typu int navíc: při výpočtu se nepoužívá, slouží pouze k odlišení těchto operátorů od prefixových verzí.

Přetěžování binárních operátorů je-li operátor definován jako metoda, levý operand představuje volající instanci, pokud chceme, aby byl binární operátor komutativní v případě, že má každý parametr jiného typu, musíme definovat dva operátory, operátory je možné předávat hodnotou nebo odkazem: pokud předáváme odkazem, musíme předat proměnnou, ne konstantu.

Přetěžování operátoru = možno definovat pouze jako nestatickou metodu, využívá se pro vytváření hluboké kopie, neexistují podmínky, co musí vracet, pokud však chceme, aby se choval standardně, měl by vracet referenci na objekt, definujeme jej vždy, když definujeme kopírovací konstruktor, nedědí se, operátory +=, -=, atd. nutno přetížit zvlášť.

Přetěžování operátoru () lze přetížit pouze jako nestatickou metodu, bývá řazen mezi binární operátory: prvním parametrem je objekt, druhým parametrem seznam formálních parametrů, deklaruje se takto: trida operator()(); jeho aplikace na instanci a vypadá takto: a(1, 2);

Přetěžování operátoru [] levým operandem je instance, pravým index, chceme-li jej používat na levé straně přiřazení, musí vracet referenci, lze změnit indexování např. od 1 do n, deklaruje se takto: trida operator[](); jeho aplikace na instanci a vypadá takto: a[1];

Přetěžování operátoru -> lze jej využít ke zpřístupnění položek vnořeného objektu, zápis a->x odpovídá tomuto volání: (a.operator->())->x, musí tedy vracet objekt nebo ukazatel na objekt, vytváří l-hodnotu, dá se využít pro automatizaci práce s pamětí.

Přetěžování operátoru přetypování lze definovat pouze jako nestatická metoda, umožňuje převést objekt jednoho typu na instanci jiného typu (ne nutně objekt), lze jej např. využít pro převod předka na potomka, má tvar operator typ (), takovýto operátor může překladač používat implicitně, je-li to třeba.

Operátory new a delete každý má dva možné tvary: void *operator new(size_t s); void *operator new [] (size _t s); void operator delete (void * p); void operator delete [] (void * p); typ size_t udává velikost paměti, lze je nejen přetěžovat, ale i předefinovat, jejich předefinování platí až do konce programu.

Přetěžování new a delete u delete nutno zachovat typ návratové hodnoty a typ prvního parametru, u new nutno zachovat typ prvního parametru, možno též přetížit jako statické metody, je-li definován operátor new nebo delete jako metoda jisté třídy a zároveň je stejný operátor předefinován jako globální, mají přednost metody.

Volání new a delete podobně jako u ostatních operátorů i zde máme dvě možnosti volání: p = new zlomek; operator new(sizeof(zlomek)); podobně pro delete, na rozdíl od ostatních operátorů je zde mezi oběma možnostmi rozdíl: při volání prvním způsobem se spouští konstruktor, při druhém nikoliv.

Na viděnou za týden… Děkuji za pozornost

Použitá literatura Pavel Herout – Učebnice jazyka C, Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server www.builder.cz.