Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004.

Podobné prezentace


Prezentace na téma: "C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004."— Transkript prezentace:

1 C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004

2 Doporučená literatura Kačmář, D. Objektově orientované programování a jazyk C++. Ostrava 1998, ISBN 80-7078-569-1 Microsoft, MSDN C/C++Language and C++ libraries.,kapitola MSDN. Virius, M. Od C k C++. Kopp 2000. - Systematicky odlišná od přednášek,ale lze použít.

3 1.1 Rozdíl mezi C++ a C Typ jazyka se automaticky rozpozná podle přípony souboru –*.C je jazyk C –*.CPP je jazyk C++ Jazyk C++ je nadmnožinou jazyka C, vše z jazyka C je možno využít

4 1.2 První program v C++ Programy v C++ mohou být : –Totožné jako v C –Velmi podobné jako v C (strukturované) s využitím objektů C++ –Objektové #include void main() { printf("Tisk v C++ pomoci printf\n“); cout << " Tisk v C++ pomoci cout " << endl; }

5 2. Neobjektové rozšíření C++ Jednořádkové komentáře Konstanty Deklarace proměnných v programu Operátor rozlišení platnosti Inline funkce Reference proměnných Implicitní parametry funkcí Přetížení funkcí Volací konvence Nové zpracování výjimek (pozdější předn.)

6 2.1 Jednořádkové komentáře C++ podporuje dva druhy komentářů #include // jednořádkový komentář #include /* komentář bez omezení počtu řádků */ void main() { printf("Tisk v C++ pomoci printf\n“); cout << " Tisk v C++ pomoci cout " << endl; }

7 2.2 Konstanty C++ konstanty: –Proměnné jejichž obsah nelze měnit –Jsou známé již v době překladu –Je znám jejich typ (na rozdíl od #define) void FunkceC() { const int I=10; int pole[I]; } void FunkceC++() { const int I=10; int pole[I]; } #define I 10;// není to proměnná – nemá adresu

8 2.3 Deklarace proměnných C++ umožňuje deklarovat proměnné přímo před jejich použitím void FunkceC() { int A; A=1; int B; B=A+1; } void FunkceC++() { int A; A=1; int B; B=A+1; }

9 2.4 Operátor rozlišení platnosti :: Rozlišuje globální a lokální proměnné int A; //A1 void Main() { int A; //A2 ::A = 0; // A1 = 0 A = 2; // A2 = 2 if (A==::A) //porovnavame A2==A1 { int A; //A3 A=1; //A3 = 1 ::A = A+1; // A1 = A3+1 // A2 je zde nedostupne }

10 2.5.1 Inline funkce Klířové slovo inline v deklaraci funkce Je to doporučení pro kompilátor aby těla funkcí vkládal přímo do kódu U rekurzivních funkcí se tak neděje V C se to řešilo pomocí maker – bez typové kontroly Zvětšuje velikost kompilovaného programu, zvyšuje rychlost programu

11 2.5.2Inline funkce příklad // makra z jazyka C - nelze krokovat #define SECTI(A,B) A+B // inline funkce C++ lze krokovat inline int Secti(int A,int B) { return A+B; } void main() { cout << Secti(5,7) << endl; // inline funkce cout << SECTI(5,7) << endl; // makro }

12 2.6.1 Reference proměnných Deklaruje se jako typ &reference Reference je nové pojmenování existující proměnné Umožňuje předávat parametry funkcí a návratové hodnoty odkazem bez ukazatelů Nezabírá místo v paměti Musí být vždy inicializována – reference bez proměnné neexistuje Parametry funkcí typu reference nemohou být naplněny výrazy

13 2.6.2Definice reference příklad void main() { int A; /* celociselna promenna */ int B; /* jina promenna */ int &refA=A; /* reference na promennou A */ B=1; /* B=1 */ refA = B; /* A,refA = B */ cout << A << endl; /* vystup je 1 */ } void main() { int &refA; // nelze int A; // referenci nelze dodatecne propojovat }

14 2.6.3 Operátor reference a adresa Operátor & v definici nebo deklaraci proměnných označuje referenci Operátor & ve výrazech označuje adresu void main() { int A,B; int &refA = A; // reference int *pA = &A; // adresa *pA = &B; // ukazatel lze menit, referenci ne }

15 2.6.4 Předávání parametrů referencí Parametry funkcí lze předávat referencí Reference není ukazatel ! void Inkrementuj(int& refArg) { refArg++; } void main() { int A; Inkrementuj(A); cout << A << endl; } void Inkrementuj(int* pA) { (*pA)++; } void main() { int A; Inkrementuj(&A); cout << A << endl; }

16 2.6.5 Návratová hodnota referencí statické data const double& PI() { static const double PI = 3.14159267; return PI; // referenci nesmime vracet lokalni promenne ktere zaniknou // referenci neni dobre vracet nekonstantni staticke promenne } void Tisk(const double& Arg) { cout << Arg << endl; } void main() { Tisk(PI()); }

17 2.6.6 Návratová hodnota referencí dynamické data struct DATA { int i,j; } DATA& NewData() { DATA *p = new DATA; // zalozime p->i = 1; // upravime p->j = 1; return *P // vratime } void main() { DATA &D = NewData(); cout << D.i << "," << D.j << endl; }

18 2.6.7 Návratová hodnota referencí opakování argumentu funkce Int& Inkrementuj(int& refArg) { return ++refArg; } void main() { int A; cout << Inkrementuj(A) << endl; }

19 2.7.1 Implicitní parametry funkcí Nastavují se v deklaraci(definici) funkce Při volání funkce nemusí být zadány Musí to být poslední parametry funkce Pokud má funkce více implicitních parametrů, nelze zadat impl. parametr za jiným impl. parametrm

20 2.7.2Implicitní parametry funkcí příklad void Inkrementuj(int& ARG,int Posun=1) { ARG = ARG + Posun; } void main() { int I =0; cout << I << endl; // 0 Inkrementuj(I);// pouzit impl. parametr cout << I << endl; // 1 Inkrementuj(I,1); cout << I << endl; // 2 Inkrementuj(I,5); cout << I << endl; // 7 }

21 2.7.3Implicitní parametry funkcí pořadí parametrů double PID(double vstup,double Kr = 1, double Ti = 9999, double Td=0) { double vysledek; // vysledek =... vypocet pro tento priklad prilis slozity return vysledek; } void main() { double u = 1; cout << PID(u) << " Kr = 1" << endl; cout << PID(u,5) << "Kr = 5" << endl; cout << PID(u,1,9999,0.1) << "Td = 0.1" << endl; // musime zadat i Kr a Ti }

22 2.8.1 Přetížení funkcí Umožňuje definovat více funkcí stejného jména a různých parametrů Skrývá před programátorem různé implementace funkce pro různé parametry Přetížené funkce se liší podle počtu a typu parametrů, ne podle návr. hodnoty Neimplicitní parametry přetížených funkcí se musí lišit Při zadání jiného typu parametru kompilátor sám zvolí na kterou funkci jej přetypuje

23 2.8.2Přetížené funkce příklad // makra v C #define TISK(ARG) cout << „Nezname: " << ARG << endl; // přetížené funkce v C++ void Tisk(unsigned int Arg) {cout << "Celé kladné číslo: " << Arg << endl; } void Tisk(int Arg) { cout << "Celé číslo: " << Arg << endl; } void Tisk(double Arg) { cout << "Reálné číslo: " << Arg << endl; } void main() { TISK(1u);Tisk(1u); TISK(2);Tisk(2); TISK(3.0);Tisk(3.0); TISK('4');Tisk('4'); //makro tiskne znak '4', c++ ascii '4' jako integer }

24 2.8.3Přetížené funkce vs. Implicitní parametry int& Inkrementuj(int& Arg) {cout << "Jeden argument" << endl; return ++Arg); } int& Inkrementuj(int& Arg,int Pocet) {cout << "Dva argumenty" << endl; return Arg=Arg+Pocet; } int& InkremetujImplicit(int& Arg,int Pocet = 1) { cout << "Jeden nebo dva argumenty." << endl; return Arg = Arg + Pocet; } void main() { int A=0; Inkremetuj(A);InkrementujImplicit(A); Inkremetuj(A,2); InkrementujImplicit(A,2); }

25 2.9 Volací konvence jazyka Při volání funkcí jednotlivé jazyky mají různý způsob vnitřního předání dat Pokud chceme využívat kód napsaný v jiném jazyce (např. dll) musíme jej zavolat odpovídajícím způsobem a naopak Konvence c,c++ je __cdecl Konvence windows funkcí je __stdcall

26 2.9.2 Volací konvence použití Volací konvence se uvádí v hlavičce funkce void __stdcall Funkce(); Funkce programu které spouští windows mají typ volání __stdcall Dll knihovny pro VisualBasic mají __stdcall

27 3.1 Základy vstupu a výstupu Inkludujeme knihovnu nebo a using namespace std; #include using namespace std; void main() { cout << "Preferovany zpusob tisku v C++.NET" << endl; } #include void main() { cout << "Starsi pristup, nefunguje v C++.NET" << endl; }

28 3.2.1 Tisk na obrazovku Používáme objekt cout Operátory << přetížené pro stand. typy Manipulátory endl,flush,dec,oct,hex,right Funkce precision, width, a flags

29 3.2.2 Tisk textu, čísel #include using namespace std; void main() { cout << "TEXT" << endl; cout << 100 << endl; cout << 10.01 << endl; cout << hex << 255 << dec << endl; } #include using namespace std; void main() { for (int i = 0; i < 100000; i++) cout << i << '\r' << flush; }

30 3.2.3 Zarovnání tisku, des. čísel #include using namespace std; void main() { cout.width(10); cout.precision(4); cout.setf(ios::fixed); cout << right; cout << width(15) << 1.123456789 << endl; cout.precision(); cout.unsetf(ios::fixed); }

31 3.3.1 Vstup z klávesnice Používáme objekt cin Operátory >> přetížené pro stand. typy Manipulátory hex, oct, dec #include using namespace std; void main() { int i; cin >> hex >> i; cout << i << endl; }


Stáhnout ppt "C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004."

Podobné prezentace


Reklamy Google