PROGRAMOVÁNÍ V C++ CVIČENÍ
INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com
PODMÍNKY ZÁPOČTU Základní podmínky společné všem skupinám Úspěšné složení zápočtového testu 1. a 2. pokusy ve zkouškovém období... 3. pokusy v dubnu 2-3 hodiny v laboratoři, společně pro všechny skupiny Vypracování zápočtového programu Dohoda o tématu - do listopadu Předvedení cvičícímu do 29.3.2013 Doladění a odevzdání do 24.5.2013 Další podmínky udělení zápočtu určuje cvičící Cvičící může podmínky individuálně upravit, pokud se s ním student na začátku semestru dohodne Přiměřená účast na cvičeních (alespoň 1/2) Úspěšné odevzdání domácího úkolu (možná jen nepovinný)
ZÁKLADNÍ TYPY Vestavěné typy: Celočíselné int, long, unsinged, unsigned long Reálná čísla float, double Znaky char, unsigned char, (wchar_t) Složené typy (definované programátorem): Struktury Třídy Přejmenované typy Deklarace typedef
PROMĚNNÉ Syntax proměnné: datový_typ jméno = počáteční_hodnota; Typ může být jakýkoliv známý (viditelný) typ Počáteční hodnota musí patřit do definičního oboru typu (konverze) Členské proměnné (membery) Definují se stejně Náleží třídě / struktuře Inicializují se v konstruktoru
FUNKCE A METODY Syntax funkce: návratový_typ jméno (parametry) { tělo_ funkce } Parametry se definují stejně jako proměnné a pracuje se s nimi stejně jako s lokálními proměnnými Tělo funkce se skládá z definicí proměnných, volání funkcí, přiřazení a podmíněných skoků (cykly a ify ) Syntax funkce main int main() {} int main(int argc, char** argv) {} void main() {} (Visual studio) Návratová hodnota je 0 (vše v pořádku), jinak kód chyby (!= 0)
VKLÁDÁNÍ DEKLARACÍ Typy a funkce jsou deklarovány v samostatných souborech Každý soubor by měl obsahovat jen jeden typ, nebo málo příbuzné typy, ale jazyk nezakazuje jiná řešení Typy a funkce deklarované v nějakém jiném souboru musí být vloženy tam kde se mají použít Vložení deklarací ze standardní knihovny #include <header.h> Vložení vlastních deklarací #include header.h
VSTUP A VÝSTUP Vstup a výstup v C++ jde přes proudy Proudy jsou součástí standardní knihovny Proudy standardizují práci s konzolí a soubory (a sítí) Starají se o optimalizaci výkonu (bufferování, binární soubory) Před použitím je nutné vložit deklaraci #include <iostream> Ostatní typy proudů jsou jiných souborech Všechny třídy standardní knihovny jsou ve jmenném prostoru std
HELLO WORLD Nejjednodušší program, který ale obsahuje mnohé důležité konstrukce nutné pro další práci Všechny použité třídy ze standardní knihovny jsou plně kvalifikované, zabraňuje to konfliktům a je to přehledné #include <iostream> void main() { std::cout << "Hello world!" << std::endl; } getchar(); // forces the program to wait for user input at the end;
PARAMETRY PROGRAMU Parametry jsou předány do funkce main v jejích parametrech Parametry je možné zadat z konzole, nebo přes zástupce Při vývoji programu se parametry zadávají přes Visual Studio int argc - První argument obsahuje počet předaných parametrů char** argv - Parametry jsou předány jako pole textových řetězců
PARAMETRY PŘÍKLAD > \program.exe Hello world Parametry funkce main budou obsahovat: argc: 3 argv: \program.exe Hello World První parametr obsahuje jméno programu (jeho spustitelnému souboru), ale to není standardem přesně specifikováno a tento parametr může obsahovat i něco jiného
HELLO WORLD REVISITED Druhá verze prvního programu, tentokrát vypíše počet parametrů a pak obsah druhého parametru (všech parametrů) Důležitá je kontrola počtu parametrů! #include <iostream> int main(int argc, char** argv) { // argument[0] is the application file name (+path) std::cout << argc << std::endl; if(argc > 1) std::cout << argv[1] << std::endl; // writes only a single word } getchar(); return 0;
LOKÁLNÍ PROMĚNNÉ Proměnné definované ve funkci Jsou použitelné jen ve funkci a existují jen když funkce běží Inicializují se na místě #include <iostream> int main(int argc, char** argv) { // argument[0] is the application file name (+path) std::cout << argc << std::endl; int count = argc; if(count > 1) std::cout << argv[1] << std::endl; // writes only a single word } getchar(); return 0;
TŘÍDA class jméno { private: member <= proměnná public: metoda <= funkce };