V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).



Podobné dokumenty
V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

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

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

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

Úvod do programovacích jazyků (Java)

Programovací jazyk C++ Hodina 1

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

Jazyk C++ I. Šablony

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

Jazyk C++ I. Polymorfismus

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Opakování programování

Programovací jazyk Pascal

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Odvozené a strukturované typy dat

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

JAZYK C++ ÚVOD. Historie. Syntaktické definice v p!ednáškách. Deklarace a definice

Zápis programu v jazyce C#

Algoritmizace a programování

Výrazy, operace, příkazy

Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů

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

PŘETĚŽOVÁNÍ OPERÁTORŮ

Jazyk C++ I. Šablony 2

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ý

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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

Data, výrazy, příkazy

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

Objektově orientované programování

Výrazy, operace, příkazy

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

NPRG031 Programování II --- 2/2 Z, Zk

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Úvod do programování. Lekce 1

Datové typy strana 29

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

Jazyk C# a platforma.net

Ukazka knihy z internetoveho knihkupectvi

dovolují dělení velkých úloh na menší = dekompozice

Prezentace a vysvětlení programového prostředí NXC

Jazyk C++ II. Šablony a implementace

Paměť počítače. alg2 1

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

IUJCE 07/08 Přednáška č. 1

PREPROCESOR POKRAČOVÁNÍ

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

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

Základy C++ I. Jan Hnilica Počítačové modelování 18

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

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

Jazyk C++ I. Polymorfismus

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

5 Přehled operátorů, příkazy, přetypování

Proměnné a datové typy

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

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

Třídy a struktury v C++

Základy programování (IZP)

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

7. Datové typy v Javě

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

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

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

6. Příkazy a řídící struktury v Javě

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

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Programování C++ Lukáš Tomášek. verze

Úvod do programovacích jazyků (Java)

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

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 -

ADT/ADS = abstraktní datové typy / struktury

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Algoritmizace a programování

Abstraktní třídy, polymorfní struktury

Více o konstruktorech a destruktorech

Teoretické minimum z PJV

Souhrn Apendixu A doporučení VHDL

6 Příkazy řízení toku

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

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

Seminář Java II p.1/43

Řídicí struktury. alg3 1

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Programování v jazyce C a C++

Transkript:

Jazyk C++ 1 Blok 1 Úvod do programovacího jazyka C++ Studijní cíl První blok kurzu je věnován úvodu do problematiky programovacího jazyka C++. V bloku budou rozebrány historické souvislosti programovacích jazyků C a C++ a budou představeny a zhodnoceny základní technologie, které se této oblasti dotýkají. Po absolvování bloku bude student ovládat základní pojmy z oblasti programování v jazyce C++. Doba nutná k nastudování 2-3 hodiny Průvodce studiem Pro studium tohoto bloku jsou u studentů požadovány předchozí znalosti z oblasti programování v jazyce C. Pro úspěšné zvládnutí bloku se u studentů předpokládá základní znalost běžných výpočetních prostředků a principů programování (počítač, vývojové prostředí, zdrojový kód, ). Historie Dalo by se říci, že jazyk C++ je objektově orientovaným rozšířením jazyka C. Autorem programovacího jazyka C++ je dánský programátor, informatik a profesor na Texas A&M University Bjarne Stroustrup. V roce 1982 Stroustrup rozšířil jazyk C o objekty pomocí preprocesoru a nazval jej C s třídami (C with classes). První verze C++ se pak objevila v roce 1985. V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011). Deklarace a definice Deklarace (informativní deklarace) informuje překladač o existenci nějakého objektu. Jazyk C++ 1 1

Definice (definiční deklarace) přikazuje překladači vytvořit daný objekt. Neobjektové rozdíly mezi C a C++ Identifikátory Délka identifikátoru (např. název proměnné) v C++ není dle normy omezena a všechny znaky jsou v něm signifikantní (významné). V jazyce C je signifikantních pouze 31 znaků. Překladače však mívají délky identifikátoru v C++ omezeny. Ve vývojovém prostředí Microsoft Visual C++ je signifikantních implicitně 247 znaků. Komentáře V jazyce C++ lze použít klasických C komentářů /* Komentáře na více řádcích. */ Podle nových norem lze uvádět jak v jazyce C, tak i v jazyce C++ také komentáře jednořádkové. // jednořádkový komentář Víceřádkové komentáře ale nelze podle normy vnořovat do sebe. Příkazy Za příkaz lze považovat také informativní i definiční deklaraci. To znamená, že deklarace se může vyskytnout na všech místech, kde syntaxe jazyka umožňuje příkaz. Rozdíl oproti jazyku C je vidět převážně u složených příkazů, tzv. bloků. V jazyce C++ je blok definován takto: {posloupnost_příkazů nep } V jazyce C je potom blok definován následovně: {posloupnost_deklarací nep posloupnost_příkazů nep } Příklad int pole[10]; pole[5] = 10; int x = pole[5]*2; // v jazyce C++ korektní zápis Deklarace proměnné je také povolena ve výrazu podmínka v příkazech: if(podmínka) příkaz Jazyk C++ 1 2

if(podmínka) příkaz else příkaz2 switch(podmínka) příkaz while(podmínka) příkaz for(inicializace; podmínka; výraz) příkaz V případě, že se jedná o cyklus for, může být proměnná deklarována též v části inicializace. Podle normy by měla být proměnná deklarovaná v těchto příkazech vždy proměnnou lokální. Ale často záleží na konkrétním překladači. Pozor, proměnnou nelze deklarovat v cyklu do příkaz while (výraz); v části výraz. Příklad if(int a = f()) Zpracuj(a); // OK b = a; // Chyba! Proměnná a už neexistuje. for(int i = 0; i < 10; i++) a[i] = i; // OK b = i; // Chyba! Proměnná i už neexistuje. Skoky Příkazů goto a switch se týká omezení možnosti přeskočit definici s inicializací, pokud nedojde k přeskočení celého bloku, v němž se tento příkaz vyskytuje. Chybný zápis if(true) goto Pokracovani; int a = 1; Pokracovani: Korektní zápis if(true) goto Pokracovani; int a; a = 1; Pokracovani: Jazyk C++ 1 3

Korektní zápis if(true) goto Pokracovani; { int a = 1; } Pokracovani: Chybný zápis switch(a) { case 0: int x = 1; break; case 1: } Korektní zápis switch(a) { case 0: int x; x = 1; break; case 1: } Korektní zápis switch(a) { case 0: { int x = 1; break; } case 1: } Jazyk C++ 1 4

Datové typy Celočíselné typy Logický typ Pro logické hodnoty (pravda, nepravda) je v jazyce C++ k dispozici datový typ bool, který může nabývat hodnot true nebo false. Přičemž platí vztah true > false. Pokud překladač na místě, kde očekává logickou hodnotu, narazí na celé číslo, reálné číslo či znak, automaticky jej konvertuje, a to: libovolné nenulové číslo => true, nulu => false. Pokud překladač na místě, kde očekává číselnou hodnotu, narazí na hodnotu logickou, automaticky ji konvertuje: true => 1, false => 0. Znakové typy Jazyk C++ zná jednobytové znakové typy char, signed char a unsigned char a dvoubytový typ wchar_t, který lze použít pro práci s UNICODE a znaky asijských jazyků. Na rozdíl od programovacího jazyku C, kde jsou znakové konstanty (např. a ) typu int, jsou v programovacím jazyce C++ znakové konstanty typu char. Pokud se znakové konstanty zapisují s prefixem L (např. L a ), bude tato konstanta typu wchar_t. Znaková konstanta v UNICODE se zapisuje \Uxxxxxxxx nebo \uxxxx, kde x představuje číslici šestnáctkové soustavy. Zápis \uxxxx je potom zkratkou pro \U0000xxxx. Pro práci s dvoubytovými znaky (wide characters) se používají funkce s prefixem w, např. wprintf. Typy pro celá čísla V jazyce C++ jsou k dispozici velké datové typy long long int a unsigned long long int, přičemž int lze vynechat. Rozsah těchto typů nesmí být menší než rozsah long int a unsigned long int. V prostředí Microsoft Visual Studio C++ jsou tyto typy 8bytové. Jejich rozsahy jsou tedy následující: Jazyk C++ 1 5

long long int -2 64 /2 až 2 64 /2-1 unsigned long long int 0 až 2 64-1 Další celočíselné typy jsou: s přesně určenou šířkou: o znaménkové: int8_t, int16_t, int32_t, int64_t o bezznaménkové: uint8_t, uint16_t, uint32_t, uint64_t s minimální šířkou alespoň N bitů: o znaménkové: int_least8_t, int_least16_t, int_least32_t, int_least64_t o bezznaménkové: uint_least8_t, uint_least16_t, uint_least32_t, uint_least64_t s minimální šířkou a nejrychlejším výpočtem: o znaménkové: int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t o bezznaménkové: uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t typy, do nichž lze uložit void* o znaménkové: intptr_t o bezznaménkové: uintptr_t s maximální šířkou o znaménkové: intmax_t o bezznaménkové: uintmax_t Hlavičkový soubor <stdint.h> obsahuje také definice maker, poskytující minimální a maximální hodnoty konkrétních typů: INTN_MIN, INTN_MAX, UINTN_MAX (např. INT16_MAX) INT_LEASTN_MIN, INT_LEASTN_MAX, UINT_LEASTN_MAX (např. INT_LEAST16_MAX) INT_FASTN_MIN, INT_FASTN_MAX, UINT_FASTN_MAX (např. INT_FAST16_MAX) INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX Ve vývojovém prostředí Microsoft Visual Studio C++ celočíselné znaménkové typy s přesně určenou šířkou, které lze používat ve spojení s modifikátorem unsigned: int8, int16, int32, int64 Jazyk C++ 1 6

Celočíselný konstantní výraz Jedná se o výraz, který dokáže překladač vyhodnotit už v době překladu. Jako operand v takovém výrazu lze použít: literál (Představuje pevně danou hodnotu, vyjádřenou explicitně, bez použití jiných prvků jazyka. Mezi literály tedy nepatří proměnné programu ani konstanty, naopak k inicializaci jejich hodnot se zpravidla literály používají.), makro, konstanta deklarovaná pomocí const inicializovaná konstantním výrazem, výčtová konstanta, operátor sizeof. Pole Oproti programovacímu jazyku C, kde lze pro zadání mezí polí využít pouze makro (manifestační konstantu) nebo literál, lze v jazyce C++ použít libovolný celočíselný konstantní výraz. Příklad const int mez = 10; enum { e = 20 }; #define d = 30; int w[mez], x[e], y[mez+e], z[d+e]; // toto nelze použít v jazyce C double v[d]; // OK v C i C++ Ukazatele V programovacím jazyce C++ nelze přiřadit ukazateli s doménovým typem ukazatel bez doménového typu (void*), např.: void* p; int a, *b; p = &a; // Lze použít v C i C++ b = p; // Chyba v C++ (nutno přetypovat), v C lze použít b = (int*)p; Ukazatel nikam V programovacím jazyce C se pro ukazatel na žádnou platnou adresu používá makro NULL. V programovacím jazyce C++ jej lze sice použít také, ale vzhledem k přísnější typové kontrole mohou nastat situace, kdy se jedná o chybu. Doporučuje se proto v jazyce C++ používat pro ukazatele nikam hodnotu nula (0). Jazyk C++ 1 7

Ve vývojovém prostředí Microsoft Visual Studio C++ je dokonce výraz NULL chápan jako synonymum pro 0. Ukazatele lze použít i v místech, kde je očekávána logická hodnota. Dochází k automatické konverzi: 0 => false, jiná hodnota => true. Standardní vstupy a výstupy Výchozím standardním výstupem (stdout) je obrazovka a lze k ní přistupovat zápisem: cout << výraz1 << výraz2 ; Výchozím standardním vstupem (stdin) je klávesnice a lze z ní načítat prostřednictvím zápisu: cin >> proměnná1 >> proměnná2 ; Před použitím cin a cout je potřeba zahrnout do zdrojového souboru hlavičkový soubor <iostream> a zahrnout jmenný prostor std: Příklad: using namespace std; int a, b; cin >> a >> b; cout << Obvod obdélníku je: << 2*(a+b); Reference Reference představuje proměnnou odkazující na jinou proměnnou a deklaruje se pomocí znaku & (ampersand). V programovacím jazyce C nemají reference obdobu. Referenci je nutné v deklaraci inicializovat nějakou l-hodnotou 1 stejného typu jako je deklarovaná reference. Proměnná, na kterou reference odkazuje, se pak nazývá odkazovaná proměnná. Cokoli se pak provede s referencí, bude mít stejný dopad, jako by se to provedlo s odkazovanou proměnnou. Např.: int i; int& refi = i; 1 l-hodnota je výraz označující místo v paměti, kam lze zapisovat. Tedy například proměnná, naopak za l-hodnotu nelze považovat konstantu. Zjednodušeně řečeno lze za l-hodnotu považovat cokoli, co může být na levé straně přiřazení. Jazyk C++ 1 8

Provedeme-li nyní přiřazení: refi = 100; Je to naprosto totéž, jako bychom provedli: i = 100; Vezmeme-li v úvahu, že ukazatel ui je ukazatel na int, jsou pak následující dva příkazy naprosto ekvivalentní: ui = &ri; ui = &i; V jazyce C++ nelze deklarovat ukazatel na referenci, pole referencí, referenci na referenci ani proměnnou typu void&. Příklad: int* ui = &i; int*& refui = ui; // OK reference na ukazatel int&* urefi; // chyba ukazatel na reference *ui = 100; *refui = 100; // dělá totéž co *ui = 100; void f(); void (&reff)() = f; // reference na fci void f(); reff(); // volání fce f(); Funkce může vracet referenci. Nejčastěji se reference používají k předávání funkcí odkazem. Konstantní reference Konstantní reference neboli reference na konstantu vznikne, použije-li se v deklaraci reference modifikátor const. Konstantní referenci nelze po inicializaci přiřadit jinou hodnotu. Příklad: int i; const int& refi = i; refi = j; // Chyba, po inicializaci nelze přiřadit jinou hodnotu Inicializátorem konstantní reference může být libovolný výraz. Pouze, pokud se nejedná o l-hodnotu, vytvoří překladač pomocnou proměnnou, do které uloží výsledek tohoto výrazu a reference potom ukazuje právě na tuto pomocnou proměnnou. Příklad: Jazyk C++ 1 9

int x = 100; const int& y = 2*x; // y odkazuje na pomocnou proměnnou s hodnotou 200 Implicitní int Pravidlo implicitního integeru, jakožto defaultního typu pro proměnnou či návratovou hodnotu funkce v případě, že v deklaraci není typ uveden, které je známé z programovacího jazyka C, není v normě jazyka C++ povoleno. Funkce V programovacím jazyce C lze provést deklaraci: int f(void); pro funkci bez parametrů a deklaraci: int f(); pro funkci s neznámým počtem a typem parametrů. V jazyce C++ znamenají oba dva výše uvedené zápisy funkci bez parametrů. Zatímco v programovacím jazyce C může volání funkce předcházet její deklaraci, v jazyce C++ tomu tak není. Před voláním funkce v programovacím jazyce C++ musí být uveden alespoň její prototyp (= informativní deklarace funkce). Parametry funkce Stejně jako v jazyce C lze i v jazyce C++ předávat parametry funkce hodnotou: int f(double a); void swap(int* a, int* b); V jazyce C++ lze navíc předávat parametry také odkazem. Parametry, jež jsou předávány odkazem, pak mají formální parametr typu reference. Pokud je formální parametr typu T&, skutečným parametrem musí být l- hodnota typu T. Jestliže je formálním parametrem konstantní reference (const T&), skutečným parametrem pak může být libovolný výraz, který se dá použít k inicializaci proměnné typu T. Nejedná-li se o l-hodnotu typu T, vytvoří překladač pomocnou proměnnou, do níž uloží výsledek výrazu a formální parametr potom bude ukazovat na tuto pomocnou proměnnou. Jazyk C++ 1 10

Shrnutí studijního bloku Tento studijní blok seznámil studenta s historickými souvislostmi, aktuálními normami jazyka C++ a s neobjektovými rozdíly mezi programovacími jazyky C a C++. Zejména pak se základními datovými typy, základními příkazy, ukazateli, referencemi a standardními vstupy a výstupy C++ programů. Otázky k procvičení pasáže 1. Jaký je hlavní rozdíl (výhoda) jazyka C++ oproti jazyku C? 2. Vysvětlete pojem deklarace. 3. Vysvětlete pojem definice. 4. Co je standardním vstupem C++ programu? 5. Co je standardním výstupem C++ programu? 6. Jakým způsobem lze přeskočit definici s inicializací v případě skoků goto a switch? Odkazy na další studijní materiály http://msdn.microsoft.com/en-us/library/vstudio/zdbe067e.aspx (oficiální stránky Microsoftu pro vývoj v programovacím jazyce C++ v prostředí Micsrosoft Visual Studio) http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail. htm?csnumber=50372 (ISO norma C++ 2011) Použité zdroje a literatura [1] PRATA, Stephen. Mistrovství v C++. 3. aktualiz. vyd. Překlad Boris Sokol. Brno: Computer Press, 2007, 1119 s. ISBN 978-80-251-1749-1. [2] Přednášky Ing. Karla Greinera, Ph.D. na předmět Jazyk C++ vyučovaný na Dopravní fakultě Jana Pernera, Univerzity Pardubice. Jazyk C++ 1 11