Programování v jazyce C a C++

Podobné dokumenty
Programování v jazyce C a C++

přetížení operátorů (o)

Objektové programování

Více o konstruktorech a destruktorech

konstruktory a destruktory (o)

Programování v C++ 1, 1. cvičení

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Programování v C++ 3, 3. cvičení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v C++ 2, 4. cvičení

PB161 Programování v jazyce C++ Přednáška 4

Programování v C++ 1, 5. cvičení

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

přetížení operátorů (o)

8 Třídy, objekty, metody, předávání argumentů metod

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Jazyk C++, některá rozšíření oproti C

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Konstruktory a destruktory

Mělká a hluboká kopie

Ukazka knihy z internetoveho knihkupectvi

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Struktury a dynamická paměť

Objektově orientované programování. Úvod

Praktické programování v C++

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Programování II. Návrh programu I 2018/19

Jazyk C++ I. Šablony 2

Virtuální metody - polymorfizmus

Algoritmizace a programování

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Ukazatele, dynamická alokace

Jazyky C a C++ kompletní průvodce 2., aktualizované vydání. Miroslav Virius

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

PB161 Programování v jazyce C++ Přednáška 4

Programování v C++ 2, 7. cvičení

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Spojová implementace lineárních datových struktur

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

PB161 programování v C++ Výjimky Bezpečné programování

Opakování programování

Operační systémy. Cvičení 3: Programování v C pod Unixem

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

1. Programování proti rozhraní

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Dynamická alokace paměti

Programování v C++ 1, 6. cvičení

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Odvozené a strukturované typy dat

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

PB161 Programování v jazyce C++ Přednáška 2

Generické programování

PB161 Programování v jazyce C++ Přednáška 7

Dědění, polymorfismus

PB161 Programování v jazyce C++ Přednáška 7

Matematika v programovacích

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Struktura programu v době běhu

Základy programování (IZP)

Základy programování (IZP)

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Přetěžování operátorů

Pointery II. Jan Hnilica Počítačové modelování 17

PB161 Programování v jazyce C++ Přednáška 9

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Programování v C++ 1, 14. cvičení

Programování v C++, 2. cvičení

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Funkce, intuitivní chápání složitosti

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Profilová část maturitní zkoušky 2017/2018

Martin Flusser. December 15, 2016

Mnohotvarost (polymorfizmus)

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Úvod do programování. Lekce 1

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

NPRG030 Programování I, 2015/16 1 / :25:32

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

Chování konstruktorů a destruktorů při dědění

Jazyk C++ II. STL knihovna kontejnery část 1

Zápis programu v jazyce C#

PREPROCESOR POKRAČOVÁNÍ

Programování v C++ VI

Transkript:

Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno

C++ Stručná charakteristika Nesdíĺı normu s C, má vlastní (snaha o maximální shodu) Rozšiřuje C o neobjektové a objektové vlastnosti, Rozšiřuje C o pokročilé programátorské techniky (šablony, výjimky,...) Koncovky zdrojových souborů jsou cpp. Hlavičkových h nebo hpp.

Složitější programy v C přináší odlišný programovací styl a ukazují nedostatky jazyka Výstup a vstup nejsou typově orientované (printf, scanf) - objektový mechanizmus streamů Alokace paměti není typově orientovaná - nový mechanizmus manipulace s pamětí (new, delete - umožňují konstrukci a zánik objektů) Není možné mít více funkcí stejného jména (labs, fabs, iabs...) - v C++ je možné (umožňuje využití šablon, streamů...) Při spolupráci více autorů nesmí dojít ke kolizi jmen proměnných / funkcí (funkce min, max, pocet jsou často využívané, název se nabízí) - řeší mechanizmus prostorů jmen

Složitější programy v C přináší odlišný programovací styl a ukazují nedostatky jazyka Předávání parametrů je možné pouze hodnotou, pro návrat hodnoty je nutné využít konstrukce s ukazatelem. V některých situacích není použití předání hodnotou použit - nově mechanizmus reference Tvorba konstantních hodnot pomocí define není ideální (určení typu, horší realizace pro složené datové typy) - const je již i v C Tvorba maker pomocí define není ideální (chová se různě pro různé datové typy či jejich kombinace - není typová kontrola) - inline je již i v C

Složitější programy v C přináší odlišný programovací styl a ukazují nedostatky jazyka Přechod ke složeným proměnným Ve stuktuře jsou ukazatele na funkce, které manipulují s jejími daty Inicializace proměnných Vracení zdrojů (pamět, soubory) - konec života proměnné Nechtěná/nesprávný změna proměnných Využití operátorů pro složené datové typy Řešení chyb Znovupoužitelnost kódu Tvorba rozhraní

Přechod ke složeným proměnným - struktury Problém bývá často popsán souborem proměnných Nutnost předávat do funkcí všechny tyto proměnné (složité) Snaha o zjednodušení předávání parametrů - využití struktur Struktura obsahuje logicky související data Složený datový typ je základem objektového programování (C++) Vede ke zjednodušení kódu

Přechod ke složeným proměnným - struktury Napište funkci pro sčítání dvou (libovolných) 2D poĺı pomocí jednoduchých proměnných. Výsledek předejte pomocí nové proměnné. Ukažte volání funkce z funkce main, včetně uložení výsledku do proměnné. Předpokládejte dynamické pole, algoritmy nepište. Napište tutéž hlavičku pomocí složené proměnné. Napište definici složené proměnné a ukažte volání z funkce main. Srovnejte složitost obou způsobů realizace. Rozdělte do zdrojových a hlavičkových souborů.

Přechod ke složeným proměnným - struktury Funkce pro sčítání pomocí jednoduchých proměnných musí mít tři trojice parametrů. Rozměry a ukazatel na data. Dvě proměnné stačí předat jednoduše, třetí trojice musí být předána tak, aby pomocí ní šel vrátit výsledek (realizace pomocí ukazatelů) Struktura bude obsahovat rozměry a ukazatel na data. Hlavička bude mít tři nebo dva parametry. V případě dvou parametrů bude struktura návratovou hodnotou. V případě tří parametrů musí být struktura předána tak, aby v ní hodnoty zůstaly i po opuštění funkce. Srovnejte složitost obou způsobů realizace. Rozdělte do zdrojových a hlavičkových souborů.

Ukazatele na funkce V programu se může vyskytnout situace, kdy je nutné za běhu programu vyhledat pro složený datový typ nejvhodnější funkci pro manipulaci. Funkce se může lišit například na datovém typu nebo na charakteru uložených dat. Než hledat vhodnou funkci, je vhodné aby byla přítomna prímo ve stuktuře Využití ukazatelů na funkce Napište funkci na tisk rozměrů 2D pole a vložte ji do struktury pole. Zavolejte tuto funkci aby vytiskla rozměry (aby měla co tisknout, musí mít strukturu jako parametr)

přetěžování funkcí V C může být pouze jedna funkce daného jména V C++ může být funkcí se stejným jménem více Funkce se musí lišit typem nebo počtem parametrů Překladač musí jenoznačně určit, kterou funkci zavolat Napište tři funkce na inicializaci struktury 2D pole (všechny pojmenujte Init): Jako prázdnou Pomocí rozměrů x,y - hodnoty vynuluje Na základě jiné proměnné typu pole (jako kopii) - originál předejte pomocí ukazatele

Reference Slouží k získání druhého jména pro existující proměnnou (alias) Používá se k předávání proměnných do a z funkcí Přeprogramujte funkci init pro vytvoření kopie z ukazatele na referenci - srovnejte

const Slouží k ochraně proměnné před přepsáním kontroluje překladač Typ a const Typ jsou rozlišitelné typy V realizovaných kódech doplňte k předávaným parametrům const tam kde je to možné

Prostory jmen Slouží k oddělení programových celků V oddělených celcích je možné používat stejné názvy proměnnýc Proměnné či celé prostory je možné zpřístupnit v jiných částech programu strukturu a její funkce přesuňte do jmenného prostoru

Práce s (dynamickou) pamětí Pro manipulaci s objekty jsou operátory new a delete (pro pole new[] a delete[]) new slouží pro získání paměti (a volá inicializační funkci - konstuktor) delete slouží pro uvolnění paměti (předtím volá ukĺızecí funkci - destruktor) původní malloc a free stále existují (zpětná kompatibilita s C) ale nejsou vhodné pro objekty opetátor new pracuje přímo s názvem datového typu naprogramujte alokaci (a odalokaci) 2D pole pomocí new a delete

Řešení chybových stavů Řešení chybových stavů je odděleno od toku programu Chyby se neřeší v místě vzniku, ale v místě, kde je to možné Při chybě je vyvolána výjimka, které přenese informaci o chybě do místa, kde je možné ji řešit Ve funkci alokace použijte pro řešení chyb mechanizmus výjimek Při záporném rozměru pole použijte výjimku int Při nulovém rozměru pole použijte výjimku typu řetězec nedostatek paměti ošetřete standardní výjimkou

vstupy a výstupy - streamy Vstupy a výstypy jsou stále v knihovnách Díky přetížení operátorů a je správný operátor volán pro daný typ překladačem Je možné psát pro vlastní objekty Napište funkci, která vytiskne strukturu (čtvercové pole) pomocí operátorů streamů

inline Obdoba maker je vhodné pro krátké funkce

Nekontrolovaný přístup k proměnné Přičtěte / odečtěte od y-ového rozměru dvojku mezi inicializací a ukončením života - co se stane? Jaký je problém? Tato manipulace není v C kontrolovatelná. V C++ je možné proměnné skrýt před uživatelem, který má možnost s nimi manipulovat pouze pomocí funkcí, které při změně hodnot provedou příslušné kontroly, aby se objekt nedostal do špatného stavu

Inicializace proměnných V C neprobíhá automaticky Proved te inicializaci proměnných (do nedefinovaného či nulového stavu) pro minulý příklad Napište funkci, která provede inicializaci proměnné (již pouze pro struct) Jak se inicializační funkce zachová při opakovaném volání Správnost inicializace záleží v C na přístupu programátora V C++ je možné (pro složené datové typy) napsat speciální funkci, kterou při vzniku automaticky zavolá překladač - nazývá se konstruktor

Ukončení života proměnných Proved te odalokaci proměnné 2D pole jak se zachová na neinicializovanou proměnnou jak se zachová při opakovaném volání správné použití záleží v C na přístupu programátora V C++ je možné (pro složené datové typy) napsat speciální funkci, kterou při zániku automaticky zavolá překladač - nazývá se destruktor

Operátory Pro strukturu není možné použít operátory (například pro typ complex, zlomek, 3D vektor/bod...) V C++ je možné pro složené datové typy operátory (do)definovat

Znovupoužitelnost totožného kódu pro různé typy - šablony napište 2D pole pro typ float, double, long double v C je nutné napsat (zkopírovat a upravit typ) každý zvlášt v případě chyby je nutné opravit pro všechny typy V C++ je možné použít tzv. šablony - tvorba stejného kódu pro různé typy

Znovupoužitelnost stejného základního kódu - dědění je-li v C++ základní kód stejný a je nutné ho mírně modifikovat pro různé typy úloh, lze použít mechanizmus dědění, kdy se vytvoří společný základ a ten je základem (base) pro další typy, které jsou mírně upraveny či rozšířeny

Tvorba rozhraní - polymorfizmus polymorfizmus máme-li různé typy (struktury), které mají různá data ale se kterými se provádí stejné operace (ale specifický kód pro daná data) je možné nadefinovat společné rozhraní a následně je možné pracovat s různými typy společně. Správnou funkci dohledá za chodu programu sám program podle aktuálního typu proměnné.