Wykład 9 2014-06-20 09:37 PP2_W9



Podobne dokumenty
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Operacje wejścia/wyjścia (odsłona druga) - pliki

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

C++ - [3-5] Pliki i strumienie w C++

Projektowanie klas c.d. Projektowanie klas przykład

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w językach

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wejście wyjście strumieniowe

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Część 4 życie programu

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Przeciążenie operatorów

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Język C++ wykład VIII

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PARADYGMATY PROGRAMOWANIA Wykład 3

Wstęp do Programowania 2

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie obiektowe

I - Microsoft Visual Studio C++

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

wykł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

Język C++ Różnice między C a C++

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Dziedziczenie & W slajdach są materiały zapożyczone z

wykł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

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Programowanie i struktury danych

Wykład 8: klasy cz. 4

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

wykł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

ROZDZIAŁ 2. Operatory

jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie Obiektowe i C++

INSTRUKCJE REPETYCYJNE PĘTLE

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Pliki wykład. Dorota Pylak

Programowanie Obiektowe i C++

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Pliki wykład 2. Dorota Pylak

TEMAT : KLASY POLIMORFIZM

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include <iostream> using namespace std; class samp { inti; public:

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Pliki wykład 2. Dorota Pylak

Zmienne i struktury dynamiczne

Ję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.

Wstęp do Programowania 2

TEMAT : KLASY DZIEDZICZENIE

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Języki programowania - podstawy

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

Podstawy programowania skrót z wykładów:

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie i struktury danych

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Operatory na rzecz typu TString

Techniki Programowania wskaźniki 2

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Programowanie Obiektowe i C++

Tablice, funkcje - wprowadzenie

Wstęp do programowania obiektowego

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie obiektowe

Referencje. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zaawansowane Programowanie Obiektowe. Informacje organizacyjne:

Język ludzki kod maszynowy

Podstawy programowania w języku C++

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Transkrypt:

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 we/wy 2014-06-20 09:37 PP2_W9 1

Przykład funkcji operatorowych program OperatoryOvLoad: // Przykład przeciążenia operatorów - funkcje operatorowe // Copyright by Tadeusz Jeleniewski 2014 // #include "stdafx.h" // Deklaracja klasy PUNKT, definicje metod i funkcji //operatorowych class PUNKT double x, y; // domyślnie private public: PUNKT(double _x=0, double _y=0): x(_x), y(_y) // konstruktor // funkcje zaprzyjaźnione bo sięgają z zewnątrz do składowych // prywatnych friend istream& operator>>(istream&, PUNKT&); friend ostream& operator<<(ostream&, PUNKT&); friend PUNKT& operator+(punkt&, PUNKT&); ; 2014-06-20 09:37 PP2_W9 2

// Definicje funkcji operatorowych istream& operator>>(istream& st, PUNKT& p) cout<<"wspolrzedne x, y: "; return st>>p.x>>p.y; // ostream& operator<<(ostream& st, PUNKT& p) return st<<"punkt o wspolrzednych: ["<<p.x<<", "<<p.y<<']'; // PUNKT& operator+(punkt& A, PUNKT& B) A.x = A.x + B.x; A.y = A.y + B.y; return A; // 2014-06-20 09:37 PP2_W9 3

int _tmain(int argc, _TCHAR* argv[]) int n, i; cout << "Rozmiar obiektu klasy PUNKT: " << sizeof (PUNKT) << endl; cout << "Podaj liczbe punktow: "; cin >> n; PUNKT *A = new PUNKT[n]; for (i=0;i<n;i++) cout << "Punkt "<<i+1<<" - "; cin >> *(A+i); // działa przeciążony operator >> for (i=0;i<n;i++) cout << *(A+i)<<endl; // działa przeciążony operator << if (n > 1) A[0] = A[0] + A[1]; // działa przeciążony operator + cout << *A << endl; A[0] = A[0] + A[1] + A[n-1]; cout << *A << endl; system ("PAUSE"); return 0; 2014-06-20 09:37 PP2_W9 4

2014-06-20 09:37 PP2_W9 5

Obiektowa implementacja listy jednokierunkowej kopiowanie obiektów // Przykład klasy lista, gdzie elementami listy są obiekty // oraz przykład kopiowania obiektu klasy LISTA na inny obiekt // tej samej klasy // Copyright by Tadeusz Jeleniewski, 2014 // #include "stdafx.h" #define sep "\n==============================================================\n" #define pusta "Lista pusta\n" // manipulatory własne class OSOBA // deklaracja klasy - jej obiekty są wierzchołkami listy public: int identyf; // skladowe klasy - publiczne char nazwisko[35], imie[30]; float wynagrodzenie; OSOBA* link; // wskaznik na nastepny obiekt // konstruktor domyślny ; 2014-06-20 09:37 PP2_W9 6

class LISTA private: // dane prywatne OSOBA* L; int ile; OSOBA* PobierzDane(void); // metody prywatne void PokazDane(OSOBA*); public: LISTA(void); // konstruktor klasy void WstawOstatni(void); // metody publiczne void PiszListe(void); ; //------------ Konstruktor klasy LISTA ------------------- LISTA::LISTA(void) L = NULL; ile = 0; 2014-06-20 09:37 PP2_W9 7

//------ Definicje metod skladowych ---------------- OSOBA* LISTA::PobierzDane(void) OSOBA *wskaznik = new OSOBA(); // tworzy i alokuje // obiekt OSOBA w pamięci wskaznik->identyf = ++ile; cout << "Podaj imie: "; cin >> wskaznik->imie; wskaznik->imie[0]=toupper(wskaznik->imie[0]); cout << "Nazwisko: "; cin >> wskaznik->nazwisko; wskaznik->nazwisko[0]=toupper(wskaznik->nazwisko[0]); cout << "Wynagrodzenie: "; cin >> wskaznik->wynagrodzenie; return wskaznik; 2014-06-20 09:37 PP2_W9 8

void LISTA::PokazDane(OSOBA* wskaznik) if (wskaznik==null) return; cout << "Identyfikator: " << wskaznik->identyf << endl; cout << " - Imie: cout << " - Nazwisko: " << wskaznik->imie << endl; " << wskaznik->nazwisko << endl; cout << " - Wynagrodzenie: " << fixed << setprecision(2) << setw(6) << wskaznik->wynagrodzenie << sep; 2014-06-20 09:37 PP2_W9 9

char Menu(void) char znak; cout << "Nacisnij:" << endl; cout << " 1 - aby dopisac na koniec listy," << endl; cout << " 2 - aby wyswietlic liste," << endl; cout << " 3 - aby skopiowac liste," << endl; cout << " 4 - aby wyswietlic kopie listy," << endl; cout << " 0 - aby zakonczyc prace." << endl; cin >> znak; cin.ignore(1); return znak; 2014-06-20 09:37 PP2_W9 10

int _tmain(int argc, _TCHAR* argv[]) bool Koniec = false; LISTA Q, K; do switch (Menu()) case '1' : Q.WstawOstatni(); break; case '2' : cout << "Lista Q = " << endl; Q.PiszListe(); break; case '3' : K = Q; //Operacja kopiowania obiektów - dozwolona break; case '4' : cout << "Lista K = " << endl; K.PiszListe(); break; default: Koniec = true; while (!Koniec); system("pause"); return 0; 2014-06-20 09:37 PP2_W9 11

2014-06-20 09:37 PP2_W9 12

2014-06-20 09:37 PP2_W9 13

2014-06-20 09:37 PP2_W9 14

// Program MVS_latajacy_napis - przykład definicji pewnej // klasy oraz użycia jej obiektów // Copyrigth by Tadeusz Jeleniewski 2014 #include "stdafx.h" // // defnicja funkcji gotoxy(int x, int y) - poza standardem + // dostepna w kompilatorach Borland // jej implementacja w MS Visual Studio void gotoxy(int x, int y) COORD c; // klasa COORD zdefiniowana w pliku nagłówkowym // Windows.h c.x = x - 1; c.y = y - 1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); 2014-06-20 09:37 PP2_W9 15

class TITLE // deklaracja klasy TITLE private: int x, y, l; // x, y - pozycja ekranowa, // l - długość łańcucha char z[40]; // z - łańcuch znaków do // wyświetlenia public: TITLE(int, int, char*); // konstruktor obiektu void Show(void); // pokazuje obiekt TITLE void Hide(void); // ukrywa obiekt void Move(int, int); // przesuwa obiekt na // ekranie ; // Konstruktor obiektu TITLE::TITLE(int _x, int _y, char* _z) x = _x; y = _y; strcpy(z, _z); l = strlen(z); Show(); 2014-06-20 09:37 PP2_W9 16

// Pozostałe metody void TITLE::Show(void) gotoxy(x, y); cprintf("%s", z); void TITLE::Hide(void) gotoxy(x, y); for (int i=0;i<l;i++) cprintf(" "); gotoxy(x, y); void TITLE::Move(int dx, int dy) Hide(); x+=dx; y+=dy; Show(); // przesuwa kurso do pozycji x, y // wyświetla napis // "zakrywa" napis 2014-06-20 09:37 PP2_W9 17

TITLE* p[2]; // tablica globalna na dwa wsk. obiektów TITLE // Funkcja główna int _tmain(int argc, _TCHAR* argv[]) char zn='t'; TITLE A(40,12,"Good afternoon"); p[0] = &A; while (tolower(zn=getch())!='q') switch (zn) case 't': case 'u': A.Move(0,-1); // 1 wiersz w górę break; case 'f': case 'l': A.Move(-1,0); // 1 kolumna w lewo break; case 'g': case 'r': A.Move(1,0); // 1 kolumna w prawo break; 2014-06-20 09:37 PP2_W9 18

case 'v': case 'd': A.Move(0,1); // 1 wiersz w dół break; case 'n': TITLE B(41,11, "What are you doing"); // nowy obiekt p[1] = &B; B.Move(0,0); // można też tak p[1]->move(0,0); break; system("cls"); // "czyści" ekran return 0; 2014-06-20 09:37 PP2_W9 19

2014-06-20 09:37 PP2_W9 20

2014-06-20 09:37 PP2_W9 21

Pozycjonowanie w plikach we/wy Termin plik sugeruje, że informacja jest tam umieszczona w określonej kolejności. Strumienie reprezentujące pliki są tak zdefiniowane, aby istniała możliwość czytania z nich lub pisania do nich danych (ciągu bajtów) od określonego miejsca lub w określone miejsce. Strumienie mają "wskaźniki" pozycji. Jeśli strumień jest wejściowy, to ma taki wskaźnik do czytania. Pokazuje nie bajt a miejsce pomiędzy dwoma bajtami - ten z lewej" to ostatnio przeczytany, a ten z prawej" będzie czytany jako następny. Strumień wyjściowy ma wskaźnik do pisania. Strumień, który może zapewniać i pisanie i czytanie - ma oba takie wskaźniki - są one niezależne od siebie. Można przecież w jednym miejscu pliku czytać i zapisywać coś w innym. 2014-06-20 09:37 PP2_W9 22

Wskaźnik czytania - wskaźnik get Jeśli otwieramy plik do czytania, to wskaźnik ten znajduje się na początku pliku. Plik tak jak nową książkę zaczyna się zwykle czytać od początku. Wskaźnik ten jednak można natychmiast przesunąć w wybrane miejsce. Wskaźnik pisania - wskaźnik put Jeśli otwieramy plik do dopisywania (tryb ios::app ) to wskaźnik ten pokazuje na koniec pliku. Dopisywać będziemy na końcu pliku. Wskaźniki do pokazywania wewnątrz plików są typu streampos Typ ten zdefiniowano w klasach istream oraz ostream. Najczęściej jest to po prostu typ long. Określa on numer czytanego lub pisanego bajtu W stosunku do takich wskaźników wykonuje się zwykle dwa rodzaje operacji: - ustalenie pozycji pokazywanej przez wskaźnik - ustawienie wskaźnika na żądaną pozycję. 2014-06-20 09:37 PP2_W9 23

Funkcje składowe informujące o pozycji wskaźników streampos tellg(); f. składowa klasy ifstream streampos tellp(); f. składowa klasy ofstream Przykład: ofstream strum("wiersz.tmp", ios::app); strum << "Przykład użycia funkcji tellp" << endl; cout << "Pozycja wskaźnika = " << (strum.tellp()); 2014-06-20 09:37 PP2_W9 24

Wybrane funkcje składowe do pozycjonowania wskaźników istream & seekg(streampos, seek_dir = ios::beg); ostream & seekp(streampos, seek_dir = ios::beg); lub prościej (nie zawsze): istream & seekg(long, seek_dir = ios::beg); ostream & seekp(long, seek_dir = ios::beg); pierwszy argument określa przesunięcie jako liczbę bajtów, drugi to kierunek przesunięcia domyślnie względem początku pliku. Typ wyliczeniowy enum seek_dir beg, cur, end ; zdefiniowano w klasie ios Przykład projekt Pozycja 2014-06-20 09:37 PP2_W9 25