Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Prog1, C++ a gyakorlatban
Magasszintű programozási nyelvek BSc előadás Dr. Bátfai Norbert egyetemi adjunktus Debreceni Egyetem, Informatikai Kar, Információ Technológia Tanszék Skype: batfai.norbert Prog1_8.ppt, v.: 0.0.3, Az óra blogja:
2
Felhasználási engedély
Bátfai Norbert Debreceni Egyetem, Informatikai Kar, Információ Technológia Tanszék nbatfai gmail com> Copyright © 2011 Bátfai Norbert E közlemény felhatalmazást ad önnek jelen dokumentum sokszorosítására, terjesztésére és/vagy módosítására a Szabad Szoftver Alapítvány által kiadott GNU Szabad Dokumentációs Licenc 1.2-es, vagy bármely azt követő verziójának feltételei alapján. Nem változtatható szakaszok: A szerzőről. Címlap szövegek: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra. Hátlap szövegek: GNU Jávácska, belépés a gépek mesés birodalmába. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being: A szerzőről, with the Front- Cover Texts being: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra, and with the Back-Cover Texts being: GNU Jávácska, belépés a gépek mesés birodalmába.
3
Célok és tartalom Előadás Funktorok
STL (a szabványos C++ sablonkönyvtár) Tervezési minták (tartalmazás, hogyan?) Labor Boost Laborkártyák Példás kártyák Otthoni opcionális feladat A japán világbajnok HELIOS csapat szoftvereinek otthoni tanulmányozása.
4
Kapcsoldó videók, videómagyarázatok és blogok
Az írásbeli és a szóbeli vizsgán bármi (jegyzet, könyv, forráskód, számítógép mobiltelefon stb.) használható! (Az írásbeli vizsgán beszélni viszont tilos.) Hiszen az én feladatom az lesz, hogy eldöntsem, jól felkészült programozóval, vagy mennyire felkészült programozóval állok szemben.
5
Minimális gyakorlati cél
A hallgató egyszerű példáiban tudja az STL szabványos tárolóit (vektor, lista, halmaz, asszociatív tömb, bithalmaz) használni. Az svn tároló elérése kapcsán:
6
Minimális elméleti cél
Vektor (dinamikus tömb, vector) Lista (kétszeresen láncolt, list) Halmaz, set Asszociatív tömb, map Bithalmaz
7
Funktorok A () fgv. Hívás operátort túlterhelő osztály (struktúra).
Funktor STL algoritmusban
8
Funktorok Ism.: fgv. Hívás, paraméterátadás vermen fgv. tár badboy
9
Funktorok Ism.: paraméterátadás Regiszterek Közös memória
Verem (tipikusan a magasszintű programozási nyelvek)
10
Ism: fgv. hívás, paraméterátadás, lokális változók
main() fgv(int a, int b, int c) { lok. vált. } main() fgv(5, 6, 7); PUSH BX PUSH 7 PUSH CX fgv() PUSH 6 PUSH DX PUSH 5 PUSH BP CALL CALL fgv MOV BP, SP SUB SP, lok. vált. ter. mér. … MOV SP, BP POP BP RET
11
Ism.: fgv. hívás, paraméterátadás, lokális változók
Visszatérési cím mentése, pl. IP a köv. végrehajtandó offszetje 5 6 7 lok. vált. ter. BP CS/IP DX CX BX ezért lehet vaarg fgv.-eket tár Veremterület (a BP-t indexelve címezzük) BP BP+4 BP+6 BP+8 main() fgv(int a, int b, int c) { lok. vált. } main() fgv(5, 6, 7); PUSH BX PUSH 7 PUSH CX fgv() PUSH 6 PUSH DX PUSH 5 PUSH BP CALL CALL fgv MOV BP, SP ADD SP, 3*(2) SUB SP, lok. vált. ter. mér. … MOV SP, BP POP BP RET
12
Funktorok
13
STL Standard Template Library (a szabványos C++ sablonkönyvtár)
C programozóknak: a sztenderd függvénykönyvtár (pl.:GNU C Library, glibc, ) C++ programozóknak: a sztenderd osztálykönyvtár (pl.: GNU Standard C++ Library, libstdc++, ) a sztenderd sablonkönyvtár A GNU-s sztenderd osztálykönyvtár API doksija:
14
Ism.: Helló, Világ! - .S Rendszerhívással .data hello:
.ascii "Hello, Vilag!" .text .global _start _start: movl $4, %eax movl $1, %ebx movl $hello, %ecx movl $14, %edx int $0x80 movl $1, %eax movl $0, %ebx Rendszerhívással A megfelelő regisztekebe töltjük a rendszerhívás kódját és para- métereit: write (1, "Hello, Vilag!", 14); EAX EBX ECX EDX exit (0); EAX EBX $ as asmhello.S -o asmhello.o $ ld asmhello.o -o asmhello $ ./asmhello Hello, Vilag!
15
Ism.: Helló, Világ! - write
#include <unistd.h> int main () { write (1, "Hello, Vilag!", 14); return 0; } Rendszerhívással $ gcc writehello.c -o writehello $ ./writehello Hello, Vilag! WRITE(2) Linux Programmer's Manual WRITE(2) NAME write - write to a file descriptor SYNOPSIS #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); DESCRIPTION ... Rendszerhívással (Az előző fólia példában a printf() hívja a write()-ot.)
16
Ism.: Helló, Világ! - printf
#include <stdio.h> int main () { printf ("Hello, Vilag!"); return 0; } Könyvtári függvénnyel $ gcc printfhello.c -o printfhello $ ./printfhello Hello, Vilag! PRINTF(3) Linux Programmer's Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion SYNOPSIS #include <stdio.h> int printf(const char *format, ...); ... Könyvtári függvénnyel
17
Ism.: Glibc trófeák Kisbajnokság: definiáld felül a glibc egy (változó argumentumszámú) függvényét! $ gcc -shared -Wl,-soname,libsajat.so.1 -o libsajat.so.1.0 libsajat.c $ ln -s libsajat.so.1.0 libsajat.so.1 $ ln -s libsajat.so.1 libsajat.so $ export LD_PRELOAD=libsajat.so $ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH $ ./teszt H 1 e 2 l 3 l 4 o $ Ha gond lenne a fordítással:
18
Ism.: Glibc trófeák háttér- és szövegszín ANSI Escape szekvenciák
libsajat.c #include <errno.h> #include <stdarg.h> int printf (char *fmt, ...) { va_list ap; errno = 1; va_start (ap, fmt); putchar (0x1B); putchar ('['); putchar ('4'); putchar ('7'); putchar (';'); putchar ('3'); putchar ('1'); putchar ('m'); vprintf (fmt, ap); putchar ('0'); va_end (ap); return 0; } teszt.c #include <stdio.h> int main (void) { printf ("H %d e %d l %d l %d o\n", 1, 2, 3, 4); } háttér- és szövegszín ANSI Escape szekvenciák visszaállítás
19
Ism.: Glibc trófeák gcc -fPIC -shared -Wl,-soname,libsajat.so.1 -o libsajat.so.1.0 libsajat.c ln -s libsajat.so.1.0 libsajat.so.1 ln -s libsajat.so.1 libsajat.so export LD_PRELOAD=libsajat.so export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH gcc teszt.c -o teszt ./teszt H 1 e 2 l 3 l 4 o
20
STL Standard Template Library (a szabványos C++ sablonkönyvtár)
C programozóknak: a sztenderd függvénykönyvtár (pl.:GNU C Library, glibc, ) C++ programozóknak: a sztenderd osztálykönyvtár (pl.: GNU Standard C++ Library, libstdc++, ) a sztenderd sablonkönyvtár A GNU-s sztenderd osztálykönyvtár API doksija:
21
API doksi http://gcc.gnu.org/onlinedocs/libstdc++/api.html
22
Iterátor végigvezetett mutató
23
Iterátor végigvezetett mutató
24
Iterátor végigvezetett mutató
25
Iterátor végigvezetett mutató
26
Iterátor végigvezetett mutató
27
Elem hozzáadása
28
Elem hozzáadása „laborkártyás logolásunkat” használva:
29
Ism. : egy asszociatív tárolós alternatíva http://progpater. blog
Sablonparaméterek: <kulcs, érték>
30
Ism. : egy asszociatív tárolós alternatíva http://progpater. blog
iterátort a tároló első elemére iterátort a tároló utolsó eleme utánra!!!
31
STL Standard Template Library (a szabványos C++ sablonkönyvtár)
Tárolók std::vector < Int > vektor; Iterátorok std::vector < Int >::iterator iter; Algoritmusok // tároló elejére stb. iter = vektor.begin (); // lehet növelgetni ++iter; // …*iter…
32
Algoritmusok Kimeneti iterátor (a << operátorral ír ki)
33
Algoritmusok
34
Algoritmusok
35
Algoritmusok
36
Algoritmusok
37
STL tárolók áttekintése
38
Tervezési minták tartalmazás
class BitMinta { public: BitMinta(string)… } class MentalFingerprint { BitMinta minta; MentalFingerprint(BitMinta minta):minta(minta) {} class MentalFingerprint { BitMinta* minta; public: MentalFingerprint(string minta):minta(new BitMinta (minta)) {} ~MentalFingerprint(){delete minta;} } class MentalFingerprint { BitMinta& minta; public: MentalFingerprintstring minta):minta(* new BitMinta (minta)) {} ~MentalFingerprint(){delete &minta;} }
39
Labor – Hetedik Szem
40
Labor – Hetedik Szem
41
(Ismétlő) laborkártyák
Mit ír ki? (Ha lefordul… s miért?)
42
(Ismétlő) laborkártyák Magyarázd meg az 5 eredménysor bitjeit!
4437 1155 1060 424 4433 1151 5493 1575 5489 1571
43
Laborkártyák Mikor-mi fut le, használd az Int osztályunkba épített „laborkártyás logolásunkat”!
44
Otthoni opcionális feladat
A robotfoci japán szoftvereinek (librcsc, agent2d) tanulmányozása a KDevelop-ban.
45
Kötelező olvasmány (B&L könyv)
Benedek Zoltán, Levendovszky Tihamér: Szoftverfejlesztés C++ nyelven, Budapest, 2007, Szak K. (S könyv) Stroustrup, Bjarne: A C++ programozási nyelv, Kiskapu, 2001.
46
Ajánlott olvasmány (OSS könyv)
Alan Ezust, Paul Ezust: An Introduction to Design Patterns in C++ with Qt 4, Prentice Hall (Open Source Series) 2006 Pdf-ben: (24 könyv) Jesse Liberty, Horvath, David B. Büki András: Tanuljuk meg a C++ programozási nyelvet 24 óra alatt
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.