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

Podobné dokumenty
Programovací jazyk C++ Cvičení 2

Abstraktní třídy, polymorfní struktury

Úvod do programování. Lekce 1

Prostory jmen. při vkládání několika hlavičkových souborů může vzniknout kolize. logika.h const int x=5; typedef struct {...

Mělká a hluboká kopie

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

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

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

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Datové proudy objektový vstup a výstup v C++

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

Ú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

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

SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1

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

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

Algoritmizace a programování

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

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

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

Struktury, funkce, reference

Datové typy pro reálná čísla

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 -

Úvod do programovacích jazyků (Java)

Abstraktní datové typy

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

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

Jazyk C++ I. Šablony 2

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

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).

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Úvod do programování. Lekce 3

Opakování programování

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

Jazyk C++ I. Šablony

katedra informatiky FEI VB-TU Ostrava 10. jna 2005 etr aloun (katedra informatiky FEI VB-TU Ostrava) Dal vrazy 10. jna / 25

Programovací jazyk C++ Hodina 1

Základy programování (IZP)

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

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

Výrazy, operace, příkazy

Racionální čísla, operátory, výrazy, knihovní funkce

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

Programování v jazyce C a C++

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

Př. další použití pointerů

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

Základy programování (IZP)

Objektově orientované programování

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

Konstruktory a destruktory

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

Jazyk C++ II. Šablony a implementace

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

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

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

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

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

Programování v C++ Objektové programování

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

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

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

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

PREPROCESOR POKRAČOVÁNÍ

Šablony, kontejnery a iterátory

Vstup a výstup datové proudy v C

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

Racionální čísla, operátory, výrazy, knihovní funkce

Šablony, kontejnery a iterátory

Více o konstruktorech a destruktorech

Jazyk C# a platforma.net

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Datové typy pro reálná čísla

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

C++ objektově orientovaná nadstavba programovacího jazyka C

Programování v jazyku C++

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

C++ objektově orientovaná nadstavba programovacího jazyka C

Zpracoval:

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

ADT/ADS = abstraktní datové typy / struktury

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

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

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

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

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

Zápis programu v jazyce C#

Základy algoritmizace a programování

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

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

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

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

Transkript:

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze Karel Müller, Josef Vogel, 2011 Programování a algoritmizace 2, BI-PA2, 2011, Přednáška 1 BI-PA2 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Programování a algoritmizace 2 Cíl předmětu naučit se psát programy v jazyku C++ využívat technologii objektově orientovaného programování abstraktní datové typy (zásobník, fronta, seznam, množina, tabulka), metody jejich implementace Organizace předmětu 2 hod. přednášek 2 hod. cvičení v počítačové učebně 2 hod. prosemináře jednou za 14 dní 6 domácích prací, test na cvičení semestrální práce zkouška Studijní materiály a další informace budou postupně zveřejňovány na eduxu Doporučená literatura Virius: Jazyky C a C++, GRADA, Praha Virius: Od C k C++, Kopp České Budějovice, 2000. Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 2/22

Programování a algoritmizace 2 Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 3/22

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 4/22 Témata: Některá rozšíření oproti jazyku C standardní datové proudy - bezpečnější vstupní a výstupní konverze přetěžování funkcí implicitní hodnoty parametrů funkcí inline funkce parametry typu reference deklarace konstanty operátory new a delete

p1\prog1-1.cpp Bezpečnější vstupní a výstupní konverze Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 5/22 #include <stdio.h> #include <iostream> using namespace std; int main() { int x; // vstup a vystup ve stylu C printf("zadej cele cislo\n"); scanf("%d", &x); printf("zadal jsi %d\n", x); // vstup a vystup ve stylu C++ cout << "zadej cele cislo" << endl; cin >> x; cout << "zadal jsi " << x << endl; return 0; Deklarujte x jako float a vyzkoušejte (prog1-1a.cpp)

Bezpečnější vstupní a výstupní konverze Pro formátovaný vstup a výstup je bezpečnější používat proudy (streamy) a přetížené operátory << a >> Standardní proudy (streamy): cin ~ stdin cin >> proměnná cout ~ stdout cout << výraz cerr ~ stderr cerr << výraz Proč je formátovaný výstup pomocí << bezpečnější než např. printf? Příklad: co vypíše následující příkaz: float f=10.3; int i=5; printf( %d %d\n, f, i); Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 6/22

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 7/22 Přípustné typy v operacích vstupu a výstupu Výstup: cout << char short int long char * float double long double void * Vstup: cin >> char short int long char * float double long double přeskočí počáteční mezery!

p1\prog1-2.cpp Manipulátory Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 8/22 Slouží pro řízení vstupní a výstupní konverze Jsou definovány v souboru <iomanip> int x = 10; cout << "dekadicky " << x << endl; cout << "celkem 10 znaku " << setw(10) << x << endl; cout << "osmickove " << oct << x << endl; cout << "sestnactkove " << hex << x << endl; cout << "dekadicky " << dec << x << endl; Některé manipulátory: dec hex oct endl setw(int n) setfill(int c) setprecision(int n) dekadická konverze šestnáctková konverze osmičková konverze konec řádku + flush šířka položky n znaků plnící znak c n desetinných míst

p1\prog1-3.cpp Přetěžování (overloading) funkcí Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 9/22 Funkce se rozlišují nejen jménem, ale i typy parametrů a počtem parametrů int na3(int x) { return x*x*x; float na3(float x) { return x*x*x; int main() { int a = 5; float b = 4.2; cout << a << "^3 = " << na3(a) << endl; cout << b << "^3 = " << na3(b) << endl; return 0;

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 10/22 Přetěžování funkcí Při volání přetížené funkce se vyvolá ta, jejíž parametry se nejlépe spárují se skutečnými parametry Párování (matching) parametrů: 1. přesná shoda typů 2. shoda typů po roztažení (promotion) char int short int enum int float double 3. shoda typů po standardní konverzi int float float int int unsigned int long 4. shoda typů po uživatelské konverzi Pokud nejlepší párování má více než jedna funkce, ohlásí se chyba

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 11/22 Přetěžování funkcí Příklady void f(float, int); void f(int, float); f(1,1); f(1.2,1.3); void f(long); void f(float); f(1.1); f(1.1f); void f(unsigned); void f(int); void f(char); unsigned char uc; f(uc); // chyba // chyba // chyba // f(float) // f(int)

p1\prog1-4.cpp Implicitní hodnoty parametrů V hlavičce funkce lze definovat implicitní (default) hodnotu parametru, skutečný parametr pak lze vynechat Skutečné parametry lze vynechávat od konce void vypis(int x, int y=0, int z=0) { cout << "x=" << x << endl; cout << "y=" << y << endl; cout << "z=" << z << endl; int main() { vypis(10,20,30); vypis(10,20); vypis(10); system("pause"); return 0; Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 12/22

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 13/22 Implicitní hodnoty parametrů Co není dovoleno void f(int x=1, int y); chyba void f(int x, int y=10); void f(int x); f(20); nejednoznačnost

Inline funkce Volání inline funkce není skok do podprogramu, ale nahradí se tělem funkce inline int max(int x, int y) { return x>y? x : y; main() { int a,b,c; a = max(b, c); Překlad inline není zaručen Je-li inline funkce zavedena v header-souboru, měla být v něm být též definována (tj. včetně těla) Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 14/22

p1\prog1-5.cpp Inline funkce ~ makra Inline funkce je vhodnější než makro Příklad: co vypíše následující program: inline int max(int x, int y) { return x>=y? x : y; #define MAX(x,y) ((x)>=(y)? (x) : (y)) int main() { int a=10; cout << max(a++,4) << endl; cout << a << endl; cout << MAX(a++,4) << endl; cout << a << endl; return 0; 10 11 12 13 Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 15/22

p1\prog1-6.cpp Výstupní parametry funkcí Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 16/22 Parametrem může být funkci zadána proměnná, jejíž hodnotu má funkce změnit Styl C (pomocí ukazatelů): Má-li funkce změnit hodnotu proměnné typu T, parametr bude typu T*, tj. ukazatel na T Příklad: funkce pro výměnu hodnot dvou proměnných typu int void vymenac(int *px, int *py) { int pom = *px; *px = *py; *py = pom; použití: int a, b; float x, y; const int c = 10; vymenac(&a, &b); vymenac(&x, &y); // chyba při překladu vymenac(&x, &c); // chyba při překladu

p1\prog1-6.cpp Výstupní parametry funkcí Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 17/22 Styl C++ (pomocí typu reference): Má-li funkce změnit hodnotu proměnné typu T, parametr bude typu T&, tj reference na T Příklad: void swap(int& x, int& y) { int pom = x; x = y; y = pom; použití: int a, b; float x, y; const int c = 10; swap(a, b); swap(x, y); // chyba při překladu swap(x, c); // chyba při překladu

Parametr typu reference Parametr typu reference na T označuje ve funkci proměnnou, která je dána skutečným parametrem Přípustným skutečným parametrem pro parametr typu reference je pouze proměnná typu T (nemůže to být ani proměnná jiného typu, ani konstanta, ani výraz obsahující operátory) Typ reference může být použit i při deklaraci proměnné (viz později) Typ reference může být kvalifikován jako typ označující konstantu (viz později) Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 18/22

p1\prog1-7.cpp Typ bool Typ bool je určen pro prácí s logickými hodnotami Literály true (1) a false (0) S hlediska operací kompatibilní s typem int Příklad: int main() { bool a=true, b=false; int i = 100, j = 0; cout << "a=" << a << ", b=" << b << endl; cout << "a b=" << (a b) << endl; cout << "a+b=" << a+b << endl; a = i; b = j; cout << "a=" << a << ", b=" << b << endl; system("pause"); return 0; Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 19/22

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 20/22 Konstanty Konstanta jednoduchého typu může být použita jako statický výraz const int Max = 100; int pole[max]; main() { Max = 10; int *p; p = &Max; // chyba! // chyba! const int *q; q = &Max;

Deklarace je příkaz Deklarace se může vyskytovat mezi příkazy Deklarace se může vyskytovat v příkazu for, její platnost je omezena jen na tento příkaz main() { for (int i=0; i<10; i++) { // zde i neexistuje for (int i=10; i>0; i--) // nová deklarace { Pozor: Podle starší normy jazyka deklarace v příkazu for platila až do konce bloku, v němž byl příkaz for uveden. V předchozím příkladě by proto druhý příkaz for způsobil chybu. Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 21/22

Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 22/22 Dynamické proměnné Pro vytvoření dynamické proměnné nepoužívat funkci malloc, ale operátor new int *p = new int; struct S {int a; char b;; S *q = new S; Operátorem new lze vytvořit pole int Pocet = 10; int *pa = new int[pocet]; Pro zrušení dynamické proměnné slouží operátor delete delete p; delete q; příznak rušení pole delete [] pa; v C++ je značka struktury jménem typu Operátorem delete lze zrušit jen to, co bylo vytvořeno operátorem new p = pa + 1; delete p; chyba