Projektowanie i programowanie obiektowe (materiały do wykładu cz. VII)
|
|
- Kazimiera Stachowiak
- 7 lat temu
- Przeglądów:
Transkrypt
1 Projektowanie i programowanie obiektowe (materiały do wykładu cz. VII) Jacek Cichosz Katedra Systemów i Sieci Komputerowych Politechnika Wrocławska
2 Dziedziczenie 265 Klasy abstrakcyjne class Figura{ public: // Czyste funkcje wirtualne virtual void rysuj() const = 0; virtual void przesun( int, int ) = 0; ; Klasa abstrakcyjna reprezentuje abstrakcyjne pojęcie i ma sens tylko jako klasa podstawowa dla jakiejś klasy pochodnej.
3 Dziedziczenie 265 Klasy abstrakcyjne class Figura{ public: // Czyste funkcje wirtualne virtual void rysuj() const = 0; virtual void przesun( int, int ) = 0; ; Klasa abstrakcyjna reprezentuje abstrakcyjne pojęcie i ma sens tylko jako klasa podstawowa dla jakiejś klasy pochodnej. Klasa abstrakcyjna to taka klasa, która zawiera przynajmniej jedną czystą funkcję wirtualną.
4 Dziedziczenie 265 Klasy abstrakcyjne class Figura{ public: // Czyste funkcje wirtualne virtual void rysuj() const = 0; virtual void przesun( int, int ) = 0; ; Klasa abstrakcyjna reprezentuje abstrakcyjne pojęcie i ma sens tylko jako klasa podstawowa dla jakiejś klasy pochodnej. Klasa abstrakcyjna to taka klasa, która zawiera przynajmniej jedną czystą funkcję wirtualną. Nie można tworzyć żadnych obiektów takiej klasy.
5 Dziedziczenie 266 Czyste funkcje wirtualne Czyste funkcje wirtualne różnią się od zwykłych funkcji wirtualnych inicjatorem 0, np. class Figura{ public: virtual void rysuj() const = 0; ; Sensownej definicji funkcji wirtualnej zdeklarowanej jako czysta, można dostarczyć dopiero w klasach pochodnych. Czysta funkcja wirtualna, której nie zdefiniowano w klasie pochodnej pozostaje czystą funkcją wirtualną, a klasa pozostaje abstrakcyjna i nie można tworzyć żadnych jej obiektów.
6 Dziedziczenie 267 Czyste funkcje wirtualne class Figura{ public: virtual void rysuj() const = 0; virtual void przesun( int, int ) = 0; ; class Okrag : public Figura{ Punkt srodek; int promien; public: Okrag( Punkt, int ); void rysuj() const; void przesun( int, int ); ; Klasy abstrakcyjnej można użyć jedynie jako klasy podstawowej dla innej klasy.
7 Dziedziczenie 268 Definiowanie funkcji wirtualnych etapami Czysta funkcja wirtualna, której nie zdefiniowano w klasie pochodnej pozostaje czystą funkcją wirtualną, a klasa pochodna pozostaje. Funkcje wirtualne można definiować etapami w kolejnych klasach pochodnych. class A{ public: virtual void f() = 0; virtual void g() = 0; ; A a; // Błąd! nie można tworzyć obiektu klasy A class B : public A{ public: void f(); // Unieważnia A :: f() ; B b; // Błąd! B jest klasą abstrakcyjną class C : public B{ public: void g(); // Unieważnia A :: g() ; C c; // O.K.
8 Dziedziczenie 269 Biblioteka figur założenia Klasa abstrakcyjna Figura definiuje ogólne pojęcie figury dwuwymiarowej poprzez zbiór operacji jakie można na niej wykonać.
9 Dziedziczenie 269 Biblioteka figur założenia Klasa abstrakcyjna Figura definiuje ogólne pojęcie figury dwuwymiarowej poprzez zbiór operacji jakie można na niej wykonać. Konkretne figury: Okrag, Linia, Prostokat,... klasy potomne klasy Figura.
10 Dziedziczenie 269 Biblioteka figur założenia Klasa abstrakcyjna Figura definiuje ogólne pojęcie figury dwuwymiarowej poprzez zbiór operacji jakie można na niej wykonać. Konkretne figury: Okrag, Linia, Prostokat,... klasy potomne klasy Figura. Każda określona figura definiuje dla siebie reprezentację, sposób rysowania i przesuwania.
11 Dziedziczenie 269 Biblioteka figur założenia Klasa abstrakcyjna Figura definiuje ogólne pojęcie figury dwuwymiarowej poprzez zbiór operacji jakie można na niej wykonać. Konkretne figury: Okrag, Linia, Prostokat,... klasy potomne klasy Figura. Każda określona figura definiuje dla siebie reprezentację, sposób rysowania i przesuwania. Operacje dla każdej figury powinny być dostępne wyłączne przez interfejs dostarczany przez klasę Figura.
12 Dziedziczenie 269 Biblioteka figur założenia Klasa abstrakcyjna Figura definiuje ogólne pojęcie figury dwuwymiarowej poprzez zbiór operacji jakie można na niej wykonać. Konkretne figury: Okrag, Linia, Prostokat,... klasy potomne klasy Figura. Każda określona figura definiuje dla siebie reprezentację, sposób rysowania i przesuwania. Operacje dla każdej figury powinny być dostępne wyłączne przez interfejs dostarczany przez klasę Figura. Chcemy przydzielać pamięć dla obiektów figur wymaganie wirtualnego destruktora.
13 Dziedziczenie 270 Graficzne współrzędne ekranowe punktu struct Punkt{ short x, y; void operator += ( Punkt d ){ x += d.x; y += d.y; inline Punkt( int l, int r ) : x( l ), y( r ) { ; (0,0) y getmaxy() x (x,y) getmaxx() Funkcja void Punkt :: operator += ( Punkt d ) służy do wyznaczania współrzędnych punktu po jego przesunięciu o wektor d. Klasa Punkt w pewnych sytuacjach oznacza współrzędne punktu, np. w reprezentacji różnych figur, a w innych oznacza współrzędne wektora d = [x, y], np. w argumencie funkcji operator += ().
14 Dziedziczenie 271 Klasa podstawowa class Figura{ public: virtual void rysuj() const = 0; virtual void przesun( Punkt ) = 0; virtual ~Figura() = 0; ; Figura :: ~Figura(){ Rysowanie polega na wywołaniu odpowiedniej funkcji bibliotecznej. Przesuwanie o zadany wektor polega na obliczeniu nowych współrzędnych figury.
15 Dziedziczenie 272 Reprezentacja prostokąta class Prostokat : public Figura{ Punkt lg, pd; public: inline Prostokat( Punkt l, Punkt r ) :lg( l ), pd( r ) { void rysuj() const; void przesun( Punkt ); ~Prostokat(); ; // Rysowanie za pomocą funkcji bibliotecznej void Prostokat :: rysuj() const{ rectangle( lg.x, lg.y, pd.x, pd.y ); Prostokat :: ~Prostokat(){ //... Usuń rysunek figury z ekranu
16 Dziedziczenie 273 Przesunięcie prostokąta na płaszczyźnie // Wyznacz nowe położenie figury void Prostokat :: przesun( Punkt p ){ lg += p; pd += p;
17 Dziedziczenie 274 Reprezentacja odcinka linii class Linia : public Figura{ Punkt pocz, kon; public: inline Linia( Punkt l, Punkt r ); void rysuj() const; void przesun( Punkt ); ~Linia(); ; Linia :: Linia( Punkt l, Punkt r ) : pocz( l ), kon( r ){ void Linia :: rysuj() const{ line( pocz.x, pocz.y, kon.x, kon.y ); Linia :: ~Linia(){ // Usuń rysunek odcinka z ekranu
18 Dziedziczenie 275 Przesunięcie linii na płaszczyźnie // Wyznacz nowe polożenie odcinka na ekranie void Linia :: przesun(punkt p){ pocz += p; kon += p;
19 Dziedziczenie 276 Reprezentacja okręgu class Okrag : public Figura{ Punkt srodek; short promien; public: Okrag( Punkt s, int r ); void rysuj() const; void przesun( Punkt ); ~Okrag(); ; Okrag :: Okrag( Punkt s, int r ) : srodek(s), promien( r ){ void Okrag :: rysuj() const{ circle( srodek.x, srodek.y, promien ); Okrag :: ~Okrag(){ // Usuń rysunek okręgu z ekranu
20 Dziedziczenie 277 Przesunięcie okręgu na płaszczyźnie // // Wyznacz nowe położenie środka // void Okrag :: przesun( Punkt p ){ srodek += p;
21 Dziedziczenie 278 Program użytkowy void main(){ int driver = DETECT, mode; initgraph( &driver, &mode, "c:\\borlandc\\bgi"); if(graphresult()!= grok ){ cprintf("blad grafiki\n"); exit(1); Figura * p[] = { new Okrag( Punkt( 100, 60 ), 40 ), new Prostokat( Punkt(200, 200), Punkt(340, 400 )), new Linia( Punkt(0,0), Punkt(200, 300)); rysuj_tab(p,sizeof(p)/sizeof(p[0])); p[1]->przesun(punkt(100, 100)); for( int i = 0; i < sizeof(p)/sizeof(p[0]) ; i++ ) delete p[i]; closegraph(); void rysuj_tab( Figura * p[], int rozmiar ){ for( int i = 0; i < rozmiar ; i++ ) p[i]->rysuj();
22 Dziedziczenie 279 Reprezentacja ogólnego pojęcia class Koszyk{ protected: int licznik; // Licznik elementów public: int ilosc() const { return licznik; Koszyk() : licznik( 0 ) { virtual ~Koszyk() = 0; virtual int dodaj( RecordT * ) = 0; virtual int usun( RecordT * ) = 0; virtual void usun_wszystko() = 0; ; Koszyk :: ~Koszyk() {
23 Dziedziczenie 280 Reprezentacja pojęcia Koszyk za pomocą listy // Koszyk zrealizowany za pomocą listy class KoszykLista : public Koszyk{ // Dane potrzebne do reprezentacji listy public: KoszykLista(); // Zwolnij pamięc elementów listy ~KoszykLista(); int dodaj( RecordT * ); int usun( RecordT * ); void usun_wszystko(); ;
24 Dziedziczenie 281 Koszyk oparty na tablicy // Koszyk zrealizowany za pomocą tablicy class KoszykTab : public Koszyk{ // Dane potrzebne do reprezentacji tablicy public: // Utwórz tablicę o zadanym rozmiarze KoszykTab( int ); // Zwolnij pamięć elementów tablicy virtual ~KoszykTab(); virtual int dodaj( RecordT * ); virtual int usun( RecordT * ); void usun_wszystko(); ;
25 Dziedziczenie 282 Koszyk oparty tablicy posortowanej // Koszyk zrealizowany za pomocą uporządkowanej tablicy class KoszykSrt : public KoszykTab{ public: // Utwórz tablicę o zadanym rozmiarze KoszykSrt( int r ) : KoszykTab( r ); // Destruktor nie robi nic // Pamięć zwalnia destruktor klasy KoszykTab ~KoszykSrt() { int dodaj( RecordT * ); int usun( RecordT * ); ;
26 Dziedziczenie 283 Wypelnianie koszyka void robimy_zakupy( Koszyk & k ){ RecordT * rp; while( (rp = czekaj_na_wybor_klienta())!= NULL ) k.dodaj( rp ); KoszykLista list; robimy_zakupy( list ); KoszykSrt srt; robimy_zakupy( srt );
27 Dziedziczenie 284 Ogólna klasa do przeglądania zawartości koszyka class KoszykItr{ public: // Inicjuj przeglądanie koszyka virtual void na_poczatek() = 0; virtual void na_koniec() = 0; // Zwróć wskaźnik bieżącego elementu virtual RecordT * biezacy() = 0; virtual RecordT * nastepny() = 0; virtual RecordT * poprzedni() = 0; ;
28 Dziedziczenie 285 Przeglądanie zawartości koszyka listowego class KoszykListaItr : public KoszykItr{ public: KoszykListaItr( KoszykLista & ); // Inicjuj przeglądanie koszyka void na_poczatek(); void na_koniec(); // Zwróć wskaźnik bieżącego elementu RecordT * biezacy(); RecordT * nastepny(); RecordT * poprzedni(); ;
29 Dziedziczenie 286 Przeglądanie zawartości koszyka tablicowego class KoszykTabItr : public KoszykItr{ public: KoszykTabItr( KoszykTab & ); // Inicjuj przeglądanie koszyka void na_poczatek(); void na_koniec(); // Zwróć wskaźnik bieżącego elementu RecordT * biezacy(); RecordT * nastepny(); RecordT * poprzedni(); ;
30 Dziedziczenie 287 Drukowanie zawartości koszyka void drukuj_koszyk( KoszykItr & itr ){ drukuj_naglowek(); // Np. Oto twoje zakupy: RecordT * rp; while( ( rp = nastepny() )!= NULL ) drukuj_rekord( rp ); KoszykTab tab( 20 ); KoszykSrt srt( 50 ); KoszykLista list; drukuj_koszyk(koszyktabitr( tab )); drukuj_koszyk(koszyksrtitr( srt )); drukuj_koszyk(koszyklistaitr( list ));
31 Dziedziczenie 288 Klasy strumieniowe ios fstreambase istream ostream strstreambase ifstream istrstream ofstream iostream ostrstream fstream strstream
32 Dziedziczenie 289 Zakres odpowiedzialności klas strumieniowych Klasa C ios istream ostream iostream fstreambase ifstream ofstream fstream strstreambase istrstream ostrstream strstream Zakres odpowiedzialności Sterowanie formatem, stan strumienia Operacje wejściowe Operacje wyjściowe Operacje wejściowe i wyjściowe Klasa podstawowa do operacji we/wy na plikach Operacje wejściowe na plikach Operacje wyjściowe na plikach Operacje wejściowe i wyjściowe na plikach Klasa podstwowa do operacji we/wy na pamięci Operacje wejściowe na pamięci Operacje wyjściowe na pamięci Operacje wejściowe i wyjściowe na pamięci
33 Dziedziczenie 290 Stany strumienia Z każdym strumieniem jest związany jego stan. Zastosowanie: obsługa błędów i różnych warunków takich jak napotkanie końca strumienia. Funkcje do testowania stanu strumienia (klasa: ios). Funkcja bad() eof() fail() good() operator!() Opis Strumień jest zniszczony. Napotkano koniec strumienia. Następna operacja zakończy się niepowodzeniem. Następna operacja może się zakończyć sukcesem. Zwraca TRUE, jeśli strumień w stanie bad lub fail Zniszczony strumień oznacza, że znaki zostały zgubione.
34 Dziedziczenie 291 Testowanie stanu strumienia w warunku #include <iostream.h> void main(){ int liczba; while( cin >> liczba ) cout << liczba << endl; Jeśli używamy strumienia w warunku, to testujemy jego stan. Test kończy się pomyślnie (zwracana jest wartość niezerowa) tylko wtedy, gdy strumień jest w stanie good.
35 Dziedziczenie 292 Testowanie stanu strumienia za pomocą funkcji
36 Dziedziczenie 293 Ustawianie stanu strumienia
37 Dziedziczenie 294 Strumienie plikowe <fstream.h> Otwieranie istniejącego pliku do odczytu: ifstream wejscie( "c:\\jacek\\dane.txt" ); if(!wejscie ){ cerr << "Nie moge otworzyc pliku!" << endl; exit( 1 ); Otwieranie pliku do zapisu: ofstream wyjscie( "c:\\jacek\\wyniki.txt" ); Otwieranie pliku do zapisu i odczytu: fstream dbase( "c:\\jacek\\rekordy.dat", ios :: in ios :: out ); Zamykanie pliku realizują destruktory odpowiednich klas lub funkcja close().
38 Dziedziczenie 295 Nieformatowane wejście i wyjście #include <fstream.h> int main( int argc, char *argv[] ){ if( argc!= 3 ){cerr << "Skladnia: kopiuj <src> <dst>\n"; return 1; ifstream src( argv[1] ); if(!src ){ cerr << "Nie mozna otworzyc pliku: " << argv[1] << endl; return 1; ofstream dst(argv[2]); if(!src ){ cerr << "Nie mozna otworzyc pliku: " << argv[2] << endl; return 1; char c; while( src.get( c ) ) dst.put( c ); if(!src.eof() dst.bad() ){ cerr << "Powazny blad!\n"; return 2; return 0;
39 Dziedziczenie 296 Wprowadzanie tekstów Rozwiązanie ryzykowne! Co będzie, gdy napis przekroczy 17 znaków? #define DLUG 18 #include <iostream.h> void main(){ char buf[dlug]; cin >> buf; cout << buf;
40 Dziedziczenie 296 Wprowadzanie tekstów Rozwiązanie ryzykowne! Co będzie, gdy napis przekroczy 17 znaków? #define DLUG 18 #include <iostream.h> void main(){ char buf[dlug]; cin >> buf; cout << buf; Bezpieczne wprowadzanie linii tekstu za pomocą funkcji get(). cin.get( buf, DLUG, \n );
41 Dziedziczenie 297 Wprowadzanie tekstu za pomocą get() Deklaracja:
42 Dziedziczenie 297 Wprowadzanie tekstu za pomocą get() Deklaracja:istream & get( char * gdzie, int ile, int = \n );
43 Dziedziczenie 297 Wprowadzanie tekstu za pomocą get() Deklaracja:istream & get( char * gdzie, int ile, int = \n ); Wczytuje zadaną liczbę znaków, chyba że zostanie napotkany znak terminatora (domyślnie: \n ).
44 Dziedziczenie 297 Wprowadzanie tekstu za pomocą get() Deklaracja:istream & get( char * gdzie, int ile, int = \n ); Wczytuje zadaną liczbę znaków, chyba że zostanie napotkany znak terminatora (domyślnie: \n ). Jeśli na wejściu pozostanie terminator, to będzie on pierwszym nie przeczytanym znakiem strumienia. Dzięki temu można sprawdzać przepełnienie bufora: #include <iostream.h> void main(){ char buf[dlug]; cin.get( buf, DLUG, \n ); char c; if( cin.get( c ) && c!= \n ) cerr << "Napis przekroczyl dlugosc bufora" << endl;
45 Dziedziczenie 298 Ustalanie i odczyt pozycji strumienia Funkcja Opis ostream& ostream::seekp( streampos ); Ustaw pozycję ostream& ostream::seekp( streamoff, ios::seekdir ); Ustaw pozycję streampos ostream::tellp(); Odczyt pozycji istream& istream::seekg( streampos ); Ustaw pozycję istream& istream::seekg( streamoff, ios::seekdir ); Ustaw pozycję streampos istream::tellg(); Odczyt pozycji g oznacza pozycję odczytu znaku, a p pozycję zapisu. ios :: seekdir oznacza bieżącą pozycję, względem której należy ustawiać nową pozycję strumienia:
46 Dziedziczenie 298 Ustalanie i odczyt pozycji strumienia Funkcja Opis ostream& ostream::seekp( streampos ); Ustaw pozycję ostream& ostream::seekp( streamoff, ios::seekdir ); Ustaw pozycję streampos ostream::tellp(); Odczyt pozycji istream& istream::seekg( streampos ); Ustaw pozycję istream& istream::seekg( streamoff, ios::seekdir ); Ustaw pozycję streampos istream::tellg(); Odczyt pozycji g oznacza pozycję odczytu znaku, a p pozycję zapisu. ios :: seekdir oznacza bieżącą pozycję, względem której należy ustawiać nową pozycję strumienia:ios :: beg początek pliku
47 Dziedziczenie 298 Ustalanie i odczyt pozycji strumienia Funkcja Opis ostream& ostream::seekp( streampos ); Ustaw pozycję ostream& ostream::seekp( streamoff, ios::seekdir ); Ustaw pozycję streampos ostream::tellp(); Odczyt pozycji istream& istream::seekg( streampos ); Ustaw pozycję istream& istream::seekg( streamoff, ios::seekdir ); Ustaw pozycję streampos istream::tellg(); Odczyt pozycji g oznacza pozycję odczytu znaku, a p pozycję zapisu. ios :: seekdir oznacza bieżącą pozycję, względem której należy ustawiać nową pozycję strumienia:ios :: beg początek pliku, ios :: cur bieżąca pozycja
48 Dziedziczenie 298 Ustalanie i odczyt pozycji strumienia Funkcja Opis ostream& ostream::seekp( streampos ); Ustaw pozycję ostream& ostream::seekp( streamoff, ios::seekdir ); Ustaw pozycję streampos ostream::tellp(); Odczyt pozycji istream& istream::seekg( streampos ); Ustaw pozycję istream& istream::seekg( streamoff, ios::seekdir ); Ustaw pozycję streampos istream::tellg(); Odczyt pozycji g oznacza pozycję odczytu znaku, a p pozycję zapisu. ios :: seekdir oznacza bieżącą pozycję, względem której należy ustawiać nową pozycję strumienia:ios :: beg początek pliku, ios :: cur bieżąca pozycja, ios :: end koniec pliku.
49 Dziedziczenie 299 Binarny odczyt i zapis do pliku Klasę RecTbl poszerzamy o dwie operacje: odczyt_bin i zapis_bin. class RecTbl{ public: // Zapis bazy w formacie binarnym ostream & zapis_bin( ostream & ) const; // Odczyt bazy w formacie binarnym istream & odczyt_bin( istream & ); //... Pozostałe deklaracje private: int rozmiar; int licznik; OsobaInfo * tab; ;
50 Dziedziczenie 300 Operacja odczytu z pliku binarnego istream & RecTbl :: odczyt_bin( istream & is ){ // Zbadaj rozmiar pliku is.seekg( 0, ios :: end ); // Przesuń wskaźnik na koniec int bajty = is.tellg(); // Odczytaj pozycję // Czy wystarczy miejsca na dane if( bajty / sizeof(osobainfo) > rozmiar ){ // Trzeba powiększyc rozmiar bazy is.seekg( 0, ios :: beg ); // Przesuń wskaźnik na początek is.read( (char *)tab, bajty ); // Wczytaj całą tablicę licznik = bajty / sizeof(osobainfo); return is;
51 Dziedziczenie 301 Operacja zapisu do pliku binarnego Zapis do pliku binarnego wszystkich rekordów bazy ostream & RecTbl :: zapis_bin( ostream & os ) const{ if( licznik > 0 ) os.write( (char *)tab, licznik*sizeof(osobainfo)); return os; Funkcja do nieformatowanego odczytu: istream & istream :: read( char* gdzie, int ile); Funkcja do nieformatowanego zapisu: ostream & ostream :: write( char* buf, int ile);
52 Dziedziczenie 302 Przykładowy program void main( int argc, char *argv[] ){ if( --argc ){ ifstream plik_we(*++argv, ios::in ios::binary ); if(!plik_we ){ cerr << "Nie moge otworzyc pliku: " << *argv << endl; exit( 1 ); RecTbl tbl(100); tbl.odczyt_bin( plik_we ); plik_we.close(); tbl.dodaj("abacki", ); // Zapis binarny do pliku ofstream plik_wy( *argv, ios::out ios::binary ); if(!plik_wy ){ cerr << "Nie moge otworzyc pliku: " << *argv << endl; exit( 1 ); tbl.zapis_bin( plik_wy );
53 Dziedziczenie 303 Strumienie napisowe <strstrea.h> Strumień można związać z tablicą znaków w pamięci głównej: #define ROZM 512 char buf[rozm]; ostrstream strwyj( buf, ROZM ); strwyj << "2 + 2 = " << 4; Jeśli nastąpi przepełnienie bufora, strumień automatycznie przejdzie w stan fail. Można użyć taki strumień do formatowania tekstu, którego nie trzeba drukować od razu.
54 Dziedziczenie 304 Strumienie napisowe przykład #include <strstrea.h> const int ROZM = 256; void main( int argc, char * argv[] ){ char buf[rozm]; ostrstream strwy( buf, ROZM ); strwy << "Ten program nazywa sie: " << *argv++ << " i ma " << --argc << " argumentow" << endl << "Argumenty programu:" << endl; while( argc-- ) strwy << *argv++ << endl; strwy << \0 ; cout << buf << endl;
55 Dziedziczenie 305 Operatory we/wy dla typów użytkownika class Zesp{ double re, im; public: inline Zesp( double r, double i = 0.0 ) : re( r ), im( i ) { //... // Operator wprowadzania friend istream & operator >> ( istream &, Zesp & ); // Operator wyprowadzania friend ostream & operator << ( ostream &, Zesp & ); ;
56 Dziedziczenie 306 Reprezentacja liczby zespolonej Liczba zespolona z niezerową częścią urojoną: ( liczba_rzeczywista, liczba rzeczywista ), np. (2.7, 90.5) Liczba zespolona z zerową częścią urojoną może być reprezentowana jak wyżej lub: (liczba_rzeczywista), np. (34.98) lub liczba_rzeczywista, np Przykład poprawnego strumienia wejściowego: ( , 6.5 ) (12.8) 45.21
57 Dziedziczenie 307 Operator wprowadzania dla typu: Zesp istream & operator >> ( istream & is, Zesp & z){ double r, i = 0.0; char c = \0 ; is >> c; if( c == ( ){ is >> r >> c; if( c ==, ) is >> i >> c; if( c!= ) ) is.clear( ios :: badbit ); else{ is.putback( c ); //Zwraca znak z powrotem do strumienia is >> r; if( is ) z = Zesp( r, i ); return is;
58 Dziedziczenie 308 Operator wyprowadzania dla: Zesp ostream & operator << ( ostream & os, Zesp & z){ if( z.im!= 0.0 ) os << ( << z.re <<, << z.im << ) ; else os << z.re; return os; void main(){ Zesp z( 0.0 ); while ( cin >> z ) cout << z << endl;
59 Dziedziczenie 309 Operatory we/wy dla klasy OsobaInfo class OsobaInfo{ friend class RecTbl; // Operator wyprowadzania friend ostream & operator << ( ostream &, OsobaInfo & ); // Operator wprowadzania friend istream & operator >> ( istream &, OsobaInfo & ); //... Pozostałe deklaracje ; // Prosta wersja operatora wprowadzania istream & operator >> ( istream & is, OsobaInfo & oi ){ is >> oi.nazwisko >> oi.tel; return is; // Operator wyprowadzania ostream & operator << ( ostream & os, OsobaInfo & oi ){ os << oi.nazwisko << << oi.tel; return os;
60 Dziedziczenie 310 Operator >> dla klasy OsobaInfo istream & operator >> ( istream & is, OsobaInfo & oi ){ char c; // Pomiń białe znaki while( is.get( c ) ) if(!isspace( c ) ){ is.putback( c ); break; char * p = oi.nazwisko; int i; // Nazwisko może zawierać tylko litery i znak myślnika - for( i = 0 ; i < DLUG_NAZW && is.get( c ) ; i++, p++ ) if( isalpha( c ) c == - ) *p = c; else break; if( i == DLUG_NAZW ) ++p; *p = \0 ; while( c!= \n &&!isdigit( c ) && is.get( c )) ; if( isdigit( c )){ is.putback( c ); is >> oi.tel; return is;
61 Dziedziczenie 311 Operator >> dla klasy RecTbl Operator >> zrealizowano jako funkcję zewnętrzną. istream & operator >> ( istream & is, RecTbl & tab ){ char buf[dlug_nazw + 1]; Tele tel; while( is >> buf >> tel ) tab.dodaj( buf, tel ); return is; Użycie w programie głównym. RecTbl tab( 100 ); ifstream plik( "c:\\jacek\\telefony.txt" ); plik >> tab;
62 Dziedziczenie 312 Operator << dla klasy RecTbl Operator << zrealizowano jako funkcję zewnętrzną. ostream & operator << ( ostream & os, const RecTbl & tab ){ RecTbl :: Itr b = tab.beg(); RecTbl :: Itr e = tab.end(); while( b!= e ){ os << *b << endl; ++b; return os; Wyprowadzenie nazwisk na ekran RecTbl tab(100); //... Wypełnij tablicę nazwiskami cout << tab;
63 Dziedziczenie 313 Indeks c J. Cichosz Start Projektowanie i programowanie obiektowe
Operacje wejścia/wyjścia (odsłona druga) - pliki
Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały
Bardziej szczegółowoProgramowanie w językach
Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie
Bardziej szczegółowoJęzyk C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Bardziej szczegółowoWykład 9 2014-06-20 09:37 PP2_W9
Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach
Bardziej szczegółowoOperacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia
Materiały Operacje na plikach Informatyka Operacje wejścia-wyjścia w C/C++: Podejście proceduralne Podejście obiektowe Standardowe strumienie wejścia i wyjścia stdin - strumień wejściowy (klawiatura) cin
Bardziej szczegółowojest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.
Wejście-wyjście Nie jest elementem języka C++ Niezbyt istotne dla użytkownika, ważne dla języka: jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.
Bardziej szczegółowoWykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include
Bardziej szczegółowoProgramowanie Obiektowe i C++
Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 13.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 13.11.2006 157 / 201 Wejście-wyjście Nie jest elementem języka C++ Niezbyt
Bardziej szczegółowoWejście wyjście strumieniowe
PARADYGMATY PROGRAMOWANIA Wykład 6 Wejście wyjście strumieniowe stdin standardowy strumień wejściowy stdout standardowy strumień wyjściowy stderr standardowy strumień komunikatów o błędach pliki - inne
Bardziej szczegółowoOperacje na plikach (niskiego poziomu) < IO.H >
OPERACJE WEJŚCIA WYJŚCIA (część b) Operacje wejścia / wyjścia odczyt i zapis danych do róŝnych zewnętrznych urządzeń lub nośników pamięciowych komputera: np. klawiatury, ekranu monitora, dyskietki, czytnika
Bardziej szczegółowoC++ - [3-5] Pliki i strumienie w C++
Slajd 1 z 13 C++ - [3-5] Pliki i strumienie w C++ Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 19 maja 2013 r. Slajd 2 z 13 Klasy i obiekty do obsługi plików Aby korzystać z obiektów do obsługi
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych Wykªad 3 1 / 37 tekstowe binarne Wyró»niamy dwa rodzaje plików: pliki binarne pliki tekstowe 2 / 37 binarne tekstowe binarne Plik binarny to ci g bajtów zapami tanych w
Bardziej szczegółowoOperacje wejścia/wyjścia odsłona pierwsza
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoPliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Bardziej szczegółowoProgramowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24
Programowanie w C++ Wykład 11 Katarzyna Grzelak 21 maja 2018 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24 Strumienie Strumień bajtów płynacy od źródła do ujścia: 1 standardowe strumienie wejściowe
Bardziej szczegółowoProgramowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
Bardziej szczegółowoProgramowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoFunkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Bardziej szczegółowoPliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Bardziej szczegółowoFunkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Bardziej szczegółowoKlasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8
12.1 12.2 Klasa iostream... 1 Klasy ofstream, ifstream... 3 12.3 Struktura FILE... 8 12.1 Klasa iostream Obiekty klasy stream tworzone automatycznie: istream& cin, standardowe wejście konsoli (klawiatura).
Bardziej szczegółowoTEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoWykład 2 Operacje wejściawyjścia. Ewa Gajda
Wykład 2 Operacje wejściawyjścia w C++ Ewa Gajda Strumienie Operacje wejścia-wyjścia w C++ realizowane są przy pomocy tak zwanych strumieni. Strumieo można sobie wyobrażad jako ciąg znaków bądź bajtów
Bardziej szczegółowoJęzyk C++ Różnice między C a C++
Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci
Bardziej szczegółowo1 Pierwsze kroki w C++ cz.3 2 Obsługa plików
1 Pierwsze kroki w C++ cz.3 2 Obsługa plików Do pracy z plikami zewnętrznymi niezbędna będzie biblioteka fstream. Udostępnia ona programiście narzędzia do zapisu i odczytu plików. 2.1 Typ zmiennej fstream.
Bardziej szczegółowoProgramowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32
Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Bardziej szczegółowoZajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Bardziej szczegółowoSkładnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Bardziej szczegółowoProgramowanie Procedurale. Pliki w języku C++
Programowanie Procedurale. Pliki w języku C++ Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale. Pliki w języku C++
Bardziej szczegółowoBiblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Bardziej szczegółowo4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku
Lista 7 Zad. 1 Pierwsza wersja programu 1. Przygotuj plik do w: plik tekstowy z pojedynczą liczbą. Umieść go w tym samym folderze, co projekt (*.cpp). 2. Nazwa pliku name nazwa zmiennej może być dowolna
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt
Bardziej szczegółowoSpis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Standardowa biblioteka szablonów (Standard Template
Bardziej szczegółowoWstęp do programowania obiektowego
Wstęp do programowania obiektowego KLASA ISTREAM KLASA OSTREAM MANIPULATORY STRUMIENIOWE STRUKTURY W C++ DOMYŚLNE WARTOŚCI PARAMETRÓW KONSTRUKTORY I DESTRUKTORY KLAS POCHODNYCH KONSTRUKTOR KOPIUJĄCY POLIMORFIZM
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoPliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)
Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string) Dorota Pylak Struktura programu działającego na plikach 2 1) Dyrektywa preprocesora #include //zapewnia
Bardziej szczegółowoProgram dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.
Program 7 Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku. #include #include using namespace std; int main()
Bardziej szczegółowoProgramowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Bardziej szczegółowoOperator przypisania. Jest czym innym niż konstruktor kopiujący!
Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przestrzenie nazw Standardowa biblioteka szablonów
Bardziej szczegółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowoWstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe
Wstęp do programowania obiektowego Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe 1 PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI W C++ 2 W C++
Bardziej szczegółowoSkładnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo
Bardziej szczegółowoProgramowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów
Rok akademicki 2016/2017, Wykład nr 5 2/40 Plan wykładu nr 5 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017
Bardziej szczegółowoWykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:
Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,
Bardziej szczegółowowykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis
i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje
Bardziej szczegółowoDziedziczenie & W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.
Dziedziczenie 27.04.2016 & 04.05.2016 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt class A{ private: int x, y; public: void setvaluex(); void setvaluey();
Bardziej szczegółowoProgramowanie Obiektowe i C++
Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!
Bardziej szczegółowoWyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Bardziej szczegółowodr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok
Bardziej szczegółowoTEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Bardziej szczegółowoProgramowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this
Bardziej szczegółowoC++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony
Słowo kluczowe class w linii: template nie oznacza, że T1 i T2 mogą być tylko klasami (jak widać na przykładzie); mogą to być dowolne typy (wbudowane lub definiowane przez użytkownika)
Bardziej szczegółowoJęzyki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Bardziej szczegółowoProgramowanie Obiektowe i C++
Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class
Bardziej szczegółowoJęzyki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
Bardziej szczegółowoProgramowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoZaawansowane programowanie w języku C++ Programowanie obiektowe
Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Bardziej szczegółowoProgramowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowotablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
Bardziej szczegółowoWstęp do programowania. Dariusz Wardecki, wyk. X
Wstęp do programowania Dariusz Wardecki, wyk. X Na czym polega przeciążanie operatorów Zamiast podawaê nazwí metody, moøna jπ oznaczyê z pomocπ symbolu operatora. Wtedy liczba argumentów metody zaleøy
Bardziej szczegółowoDla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Bardziej szczegółowoProgramowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411b Plan wykładu Operacje wejścia-wyjścia Dostęp do plików Struktury
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
Bardziej szczegółowowykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Bardziej szczegółowoJęzyki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim
Bardziej szczegółowowykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
Bardziej szczegółowoTABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;
Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst
Bardziej szczegółowoNowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)
Różnice między C i C++ (Rozszerzenia C++) Nowe słowa kluczowe class, delete, new, friend,... Komentarze /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Wskaźniki typu void W C wskaźniki
Bardziej szczegółowo// Potrzebne do memset oraz memcpy, czyli kopiowania bloków
ZAWARTOŚCI 3 PLIKOW W WORDZIE: MAIN.CPP: #include #include #include pamięci // Potrzebne do memset oraz memcpy, czyli kopiowania bloków #include "Rysowanie_BMP.h" using
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowomain( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!
Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoPodstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
Bardziej szczegółowoProgramowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Bardziej szczegółowoTablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Bardziej szczegółowoReferencje. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zaawansowane Programowanie Obiektowe. Informacje organizacyjne:
Referencje Informacje organizacyjne: Wykład: środy, 13:15 14:45 Strona główna www z komunikatami dla ZPO: http://troja.uksw.edu.pl/category/zpo2017/ Zaawansowane Programowanie Obiektowe E-mail: k.trojanowski@uksw.edu.pl
Bardziej szczegółowoProgramowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26
Programowanie w C++ Wykład 13 Katarzyna Grzelak 4 czerwca 2018 K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Bardziej szczegółowoPliki wykład. Dorota Pylak
Pliki wykład Dorota Pylak Pliki 2 Większość programów komputerowych korzysta z plików, np. w edytorach tekstów tworzymy pliki dokumentów. Plik (ang. file) jest porcją danych zapisanych na jakimś nośniku.
Bardziej szczegółowoPliki wykład. Dorota Pylak
Pliki wykład Dorota Pylak Pliki 2 Większość programów komputerowych korzysta z plików, np. w edytorach tekstów tworzymy pliki dokumentów. Plik (ang. file) jest porcją danych zapisanych na jakimś nośniku.
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.
Bardziej szczegółowoProgramowanie komputerowe. Zajęcia 1
Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program
Bardziej szczegółowoJęzyk C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Bardziej szczegółowo1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Bardziej szczegółowoInformacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Bardziej szczegółowoOperatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
Bardziej szczegółowoWstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
Bardziej szczegółowoKurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Bardziej szczegółowoPROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec
PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty
Bardziej szczegółowoWykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim
Bardziej szczegółowoWprowadzenie do programowania i programowanie obiektowe
Wprowadzenie do programowania i programowanie obiektowe Wirtotechnologia Zajęcia nr 10 autor: Grzegorz Smyk Wydział Odlewnictwa Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza
Bardziej szczegółowo