Fejlett programozási nyelvek C++ Sablonok és adatfolyamok



Hasonló dokumentumok
Pénzügyi algoritmusok

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

Fejlett programozási nyelvek C++ Iterátorok

A C++ nyelvben a függvény nevek túlterhelésével biztonságosabbá tehetnénk az adatok kiírását és beolvasását.

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

117. AA Megoldó Alfréd AA 117.

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Globális operátor overloading

8. Gyakorlat. Rövid elméleti összefoglaló: Fájlkezelés

Programozás II. 2. Dr. Iványi Péter

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

500. AA Megoldó Alfréd AA 500.

1. Alapok. Programozás II

228. AA Default Konstruktor AA 228.

Bevezetés a programozásba 2

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

500. DD Megoldó Alfréd DD 500.

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

C++ Standard Template Library (STL)

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

503.AA Megoldo Arisztid 503.A

Programozás alapjai 2. (2. ea) C++

C++ programozási nyelv Struktúrák a C++ nyelvben Gyakorlat

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

500.AA Megoldó Kulcsár 500.A

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

1000.AA Megoldo Alfréd 1000.A

128. AA Megoldó Alfréd AA 128.

Programozás alapjai II. (7. ea) C++

500.AJ Megoldó Magyar Magdolna 500.J

1.AA MEGOLDÓ BERCI AA 1.

A C++ Standard Template Library rövid összefoglalás

.AA Megoldó Alfréd AA.

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

500. CC Megoldó Alfréd CC 500.

Bevezetés a programozásba I.

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa

Felhasználó által definiált adattípus

Programozás alapjai II. (7. ea) C++

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Alkalmazott modul: Programozás 2. előadás. Procedurális programozás: adatfolyamok, adatsorok kezelése

Elemi alkalmazások fejlesztése II. 2. Beadandó feladat Juhász Ádám

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás II. 4. Dr. Iványi Péter

Programozás. C++ típusok, operátorok. Fodor Attila

C++ függelék. Tartalom

Programozási alapismeretek 2009/2010

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Java programozási nyelv 10. rész Input/output kezelés

Bevezetés a programozásba I 7. gyakorlat. C++: szövegkezelés, szekvenciális fájlkezelés. Szövegkezelés Karakterkezelés

7. gyakorlat Sorozatok, Fájlkezelés

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Programozás 6. Dr. Iványi Péter

Mit ír ki? feladatok megoldásokkal

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

C++ Gyakorlat jegyzet 8. óra

Munka állományokkal. mv: áthelyezés (átnevezés) rm: törlés. rmdir: üres könyvtár törlése. -r, -R: rekurzív (könyvtár) -r, -R: rekurzív (könyvtár)

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Kalapácsvetés 2016 szöveges

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

feladat pont min elért

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Algoritmizálás + kódolás C++ nyelven és Pascalban

Algoritmizálás + kódolás C++ nyelven és Pascalban

Bevezetés, a C++ osztályok. Pere László

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;

Bevezetés a programozásba Előadás: A const

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Informatika terméktervezőknek

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

Alprogramok, paraméterátadás

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Fejlett programozási nyelvek C++

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozás C és C++ -ban

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE

500.AA Megoldo Arisztid 500.A

Programozás II gyakorlat. 4. Öröklődés

Programozás alapjai II. (6. ea) C++

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

Átírás:

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok 11. előadás Antal Margit 2009 slide 1

Témakörök Sablonok Függvénysablon Osztálysablon Sablon metaprogramozás Adatfolyamok Operátorok és manipulátorok I/O műveletek: bináris és szöveges Fájlfolyamok Feladatok slide 2

Függvénysablon Függvénysablon : függvénycsalád fordítás idejű polimorfizmus template<class T> const T& max(const T& x, const T& y) { return x < y? y : x; template<class T> void swap(t& x, T& y) { const T tmp = x; x = y; y = tmp; slide 3

Osztálysablon Osztálysablon : osztálycsalád fordítás idejű polimorfizmus template<class T1, class T2> struct pair { ; typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair(); pair(const T1& x, const T2& y);... slide 4

Példák template< class T1, class T2> pair<t1, T2> make_pair(const T1& x, const T2& y) { return pair<t1, T2>(x, y); template< class T> void swap( T& x, T& y){ const T tmp = x; x = y; y = tmp; slide 5

Sablonparaméterek (1) típus közönséges típus érték sablon template<class T, int MAX=100> class Stack{ ; T elements[ MAX ];... slide 6

Sablonparaméterek (2) template <class T, class CONT=vector<T> > class Stack{ CONT elements; public: void push( const T& e ){ elements.push_back( e );... ; slide 7

Tagfüggvények definíciója template<typename T> class Array { T* elements; int size; public: explicit Array(const int size);... ; template<typename T> Array<T>::Array(const int size) : size(size), elements(new T[size]){ slide 8

Példa: template < class T > void foo( const T& c, const char * str="") { typename T::const_iterator it; cout<<str; for(it = c.begin();it!= c.end(); ++it) cout<<*it<<' '; cout<<endl; slide 9

Sablon metaprogramozás Template Metaprogramming template<unsigned int N> struct Fact{ static const unsigned long int value = N * Fact<N-1>::value; ; template<> struct Fact<0>{ static const unsigned long int value = 1; ; // Fact<8> is computed at compile time: const unsigned long int fact_8 = Fact<8>::value; int main() { cout << fact_8 << endl; return 0; slide 10

Adatfolyamok - bevezetés AT&T alapozta meg az I/O standardot, amelyet a C++ könyvtár standardizálása előtt is használtak Módosítások történtek, de az alapelvek nem változtak slide 11

Adatfolyamok Program állomány billentyűzet program Bemeneti adatfolyam Kimeneti adatfolyam állomány képernyő program Alapvető adatfolyam-osztályok: istream ostream slide 12

Globális adatfolyam-objektumok cin istream, C stdin, billentyűzet cout ostream, C stdout, monitor, pufferelt cerr ostream, C stderr, monitor, nem pufferelt clog ostream, cerr-el megegyező eszközhöz csatolva, pufferelt slide 13

Operátorok és manipulátorok Operátorok: while( cin>>a>>b) cout<<a<<"\t"<<b<<"\n"; Manipulátorok: endl, ostream, '\n' kiírása + puffer ürítése ends, ostream, '\0' kiírása flush, ostream, puffer ürítése noskipws, istream, fehér karakterek olvasása slide 14

Manipulátorok char c; while( cin>>c ){ cout<<c<<":"<<(int)c<<endl; char c; cin >> noskipws; while( cin>>c ){ cout<<c<<":"<<(int)c<<endl; slide 15

Alapvető stream osztályok ios_base basic_streambuf<> streambuf, wstreambuf basic_ios<> ios, wios basic_istream<> istream, wistream basic_ostream<> ostream, wostream basic_iostream<> iostream, wiostream slide 16

Adatfolyamok állapota Adatfolyam objektum van állapota az adatfolyam állapotát a kapcsolók értékei határozzák meg: goodbit: minden rendben eofbit: fájl vége failbit: hiba, az utolsó I/O sikertelen badbit: végzetes hiba slide 17

Állapot-kezelő tagfüggvények good() rdstate() eof() clear() fail() clear(state) bad() setstate( state ) list<int> a; while(!cin.eof() ) { int x; cin>>x; a.push_back( x ); Bemenet: 1, 2, 3 Lista: 1, 2, 3, 3 slide 18

Felhasználói típusok írása/olvasása Operátorok túlterhelése: istream& operator>>( istream& is, T& v ){ //v beolvasása return is; ostream& operator<<(ostream& is,const T& v ) { //v kiíratása return os; slide 19

Fájlfolyamok { ifstream ifs("in.txt");//konstruktor if(!ifs ){//Hiba+kilépés //... //automatkusan megsemmisül-destruktor { ifstream ifs; ifs.open("in.txt"); //... ifs.close(); //... slide 20

Fájl megnyitási módok std::ios kapcsoló in out out trunc out app in out in out trunc jelentés csak olvasás (létező fájl) csak írás (létrehozza vagy üríti) csak írás (létrehozza vagy üríti) hozzáfűzés (létrehozza szükség esetén) írás és olvasás, csak létező fájl, kezdőpozíció: fájl eleje ürítés, írás és olvasás (létrehozza szükség esetén) slide 21

Fájl I/O bájtonként ifstream ifs("in.txt"); if(!ifs ){ cerr<<"hiba"<<endl; exit( 1 ); char c; while( ifs.get( c ) ) cout.put( c ); int get(); istream& get ( char& c ); istream& get ( char* s, streamsize n ); istream& get ( char* s, streamsize n, char delim ); istream& get ( streambuf& sb); istream& get ( streambuf`& sb, char delim ); slide 22

Formázott fájl I/O ifstream ifs("in.txt"); int i; double d; string s; ifs >> i >> d >> s;//elválasztók: fehér karakterek fstream f("out.txt", ios::in ios::out ios::trunc); for( int i=0; i<10; ++i ) f<<i<<endl; f.flush(); f.seekg(0, ios::beg); int x; while( f>>x) cout<<x<<endl; slide 23

Bináris I/O istream& read( char* buffer, streamsize count); ostream& write(const char* buffer, streamsize c); slide 24

Közvetlen elérés (Random Access) basic_istream<> ( g get ) tellg() seekg( pos ) seekg( offset, relative_position ) basic_ostream<> ( p - put) tellp() seekp( pos ) seekp( offset, realtive_position ) slide 25

Közvetlen elérés (Random Access) (folyt.) beg : beginning cur : current end : end Példák: file.seekg( 0, ios::beg) file.seekg( 20, ios::cur) file.seekg(-10, ios::end) slide 26

Indexelhető bemeneti adatfolyam myifstream f("be.txt"); for( int i=0; i<f.filesize(); ++i ) cout<<f[i]<<" "; cout<<endl; slide 27

Megoldás class myfstream:public ifstream{ public: myfstream( const char * fname ):ifstream(fname){ char operator[]( int index ){ this->seekg(index); return this->get(); ; long filesize(){ this->seekg(0, ios::end); streampos size = this->tellg(); this->seekg(0, ios::beg); return size; slide 28

Általánosítás IndexFileStream f("be.txt"); for( int i=0; i<f.filesize(); ++i ) cout<<f[i]<<" "; cout<<endl; for( int i=0; i<f.filesize(); ++i ) f[i]=::toupper( f[i] ); cout<<endl; for( int i=0; i<f.filesize(); ++i ) cout<<f[i]<<" "; cout<<endl; slide 29

Megoldás köztes osztály (1) class Position{ fstream& stream; long pos; public: Position( fstream& stream, long pos ): stream(stream), pos( pos){ Position& operator=( const char c ){//Fájlba ír stream.seekp( pos, ios::beg ); stream.put( c ); return *this; operator char(){ //Fájlból olvas stream.seekg( pos, ios::beg ); return stream.get( ); ; slide 30

Megoldás (2) class IndexFileStream: public fstream{ public: IndexFileStream( const char * fname ):fstream(fname){ ; Position operator[]( int index ){ this->seekg(index, ios::beg); return Position( *this, index); long filesize(){ this->seekg(0, ios::end); streampos size = this->tellg(); this->seekg(0, ios::beg); return size; slide 31