Wstęp do programowania. Dariusz Wardecki, wyk. X

Podobne dokumenty
Programowanie, część I

Programowanie, część I

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

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

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

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

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

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Język C++ wykład VIII

Wprowadzenie do programowania i programowanie obiektowe

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

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

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

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

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

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Pliki wykład 2. Dorota Pylak

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

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

Część 4 życie programu

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

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

Programowanie w językach

Programowanie obiektowe w C++ Wykład 12

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

Pliki wykład 2. Dorota Pylak

Wstęp do programowania. Dariusz Wardecki, wyk. VI

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

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

Programowanie 2. Język C++. Wykład 3.

Techniki Programowania wskaźniki 2

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

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

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

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

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

Programowanie, część I

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

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

Wykład 2 Operacje wejściawyjścia. Ewa Gajda

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wstęp do Programowania 2

Wykład 8: klasy cz. 4

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

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

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Podstawy Programowania Obiektowego

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

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

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

I - Microsoft Visual Studio C++

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

Wstęp do programowania

Programowanie obiektowe

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

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Programowanie w języku C++

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie Obiektowe i C++

Programowanie i struktury danych

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Programowanie obiektowe w C++ Wykład 1

Projektowanie klas c.d. Projektowanie klas przykład

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

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Zadania z podstaw programowania obiektowego

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład :37 PP2_W9

TEMAT : KLASY POLIMORFIZM

Informacja o programowaniu w c++ Dr Maciej Bobrowski

Techniki Programowania wskaźniki

Programowanie i struktury danych

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

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

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

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

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

Wstęp do programowania. Dariusz Wardecki, wyk. V

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

dr inż. Jarosław Forenc

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

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

Transkrypt:

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 od liczby argumentów operatora. class Wektor double x, y; void add(wektor w); ; void Wektor::add(Wektor w) x += w.x; y += w.y; Wektor w, v; w.add(v); class Wektor double x, y; void operator +=(Wektor w); ; void Wektor::operator +=(Wektor w) x += w.x; y += w.y; Wektor w, v; w += v; // wywo anie metody operator +=

Przeciążanie operatorów Argumenty funkcji wywo ywanej jako operator nie muszπ byê tego samego typu jak obiekt, w kontekúcie którego wywo ywana jest metoda. class Wektor double x, y; void operator *=(double r); ; void Wektor::operator *=(double r) x *= r; y *= r; Wektor w; w *= 2; // wywo anie metody operator *= class Wektor double x, y; void operator +=(double r); ; void Wektor::operator +=(double r) x += r; Wektor w; w += 1; // wywo anie metody operator +=

Przeciążanie operatorów Przykład: Napisz program, który wykorzystując przciażenie operatorów + oraz * definiuje kolejno operację doawania oporników połączonych szeregowo i równolegle.

Przeciążanie operatora [] Moøna takøe przeciπøaê operator wskazania elementu tablicy []. Reprezentujπca go funkcja najczíúciej zwraca referencjí, aby moøna by o uøyê jej po lewej stronie operator przypisania =. class Wektor double x, y; double& wsp(int n) return n == 1? x : y; ; Wektor w; class Wektor double x, y; double& operator [](int n) return n == 1? x : y; ; Wektor w; w.wsp(1) = 2; // wywo anie metody wsp() w[1] = 2; // wywo anie metody operator []

Konstruktor Jeúli w czasie tworzenia obiektu danej klasy naleøy wykonaê jakπú akcjí (np. zarezerwowaê pamiíê), to jednym z jej sk adników powinien byê konstruktor (ang. constructor). Konstruktor Metoda wywo ywana automatycznie (z odpowiednimi argumentami) podczas tworzenia obiektu. Zawsze ma takπ nazwí, jak klasa, której jest sk adnikiem. class Tablica double *elem; int n; double& operator [](int n); Tablica(int n_el); ; Tablica::Tablica(int n_el) elem = new double[n_el]; if (elem) n = n_el; Tablica tab(10); // wywo anie konstruktora

Definiowanie wielu konstruktorów Wjednejklasiemoøe byê wiele konstruktorów, ale muszπ one róøniê sií jednoznacznie liczbπ lub typami danych argumentów. class Tablica double *elem; int n; double& operator [](int n); void init(int n_el); Tablica(int n_el); Tablica(int n_el, double r); ; void Tablica::init(int n_el) elem = new double[n_el]; if (elem) n = n_el; Tablica::Tablica(int n_el) init(n_el); Tablica::Tablica(int n_el, double r) init(n_el); for (int i = 0; i < n; i++) elem[i] = r; Tablica tab(10); Tablica tmp(10, -1); // Tablica(int) // Tablica(int, double)

Lista inicjalizacyjna class Matrix22 double w1k1, w1k2, w2k1, w2k2; Matrix22(void): w1k1(0), w1k2(0), w2k1(0), w2k2(0) Matrix22(double r): w1k1(r), w1k2(0), w2k1(0), w2k2(r) Matrix22(double a, double b, double c, double d): w1k1(a), w1k2(b), w2k1(c), w2k2(d) double det(void) const return w1k1*w2k2 - w1k2*w2k1; Matrix22 operator +(Mattix22 m) return Matrix22(w1k1 + m.w1k1, w1k2 + m.w1k2, w2k1 + m.w2k1, w2k2 + m.w2k2); ; int main() Matrix22 A(1), B(2), C; C = A + B; cout << C.w1k1 << " " << C.w1k2 << " " << C.w2k1 << " " << C.w2k2 << endl; A = C + B; cout << A.w1k1 << " " << A.w1k2 << " " << A.w2k1 << " " << A.w2k2 << endl; B = A + C; cout << B.w1k1 << " " << B.w1k2 << " " << B.w2k1 << " " << B.w2k2 << endl; return 0;

Kiedy wywoływane są konstruktory Dla zmiennych lokalnych Bezpoúrednio po utworzeniu zmiennej w czasie wykonywania bloku zawierajπcego jej definicjí (przewaønie w miejscu odpowiadajπcym po oøeniu definicji zmiennej w obríbie bloku). Dla zmiennych dynamicznych Bezpoúrednio po utworzeniu zmiennej z uøyciem new, np.: wsk = new Tablica(10); Dla zmiennych globalnych lub statycznych Przed rozpoczíciem wykonywania funkcji main(), bezpoúrednio po zarezerwowaniu pamiíci na te zmienne.

Destruktor Jeøeli przed usuniíciem obiektu z pamiíci trzeba przeprowadziê jakπú dodatkowπ czynnoúê (np. zwolniê pamiíê zarezerwowanπ przez konstruktor), to jednym ze sk adników klasy powinien byê destruktor (ang. destructor). Destruktor Metoda wykonywana automatycznie bezpoúrednio przed usuniíciem obiektu z pamiíci. Jej nazwa musi sk adaê sií ze znaku ~ inazwyklasy, której jest sk adnikiem. Do destruktora nie moøna przekazywaê argumentów, wiíc w kaødej klasie moøe byê co najwyøej jeden destruktor.

Definiowanie destruktora class Tablica double *elem; int n; double& operator [](int n) return elem[n]; void init(int n_el); Tablica(int n_el) init(n_el); Tablica(int n_el, double r); ~Tablica(void); ; void Tablica::init(int n_el) elem = new double[n_el]; if (elem) n = n_el; Tablica::Tablica(int n_el, double r) init(n_el); for (int i = 0; i < n; i++) elem[i] = r; Tablica::~Tablica(void) n = 0; if (elem) delete [] elem; Tablica *wsk; wsk = new Tablica(10, 0); delete wsk; // ~Tablica()

Kiedy wywoływany jest destruktor? Dla zmiennych lokalnych Bezpoúrednio przed usuniíciem zmiennej z pamiíci po zakoòczeniu wykonywania bloku zawierajπcego jej definicjí (przewaønie w miejscu odpowiadajπcym po oøeniu klamry koòczπcej blok). Dla zmiennych dynamicznych Bezpoúrednio przed usuniíciem zmiennej z uøyciem delete. Dla zmiennych globalnych lub statycznych Po zakoòczeniu wykonywania funkcji main(), bezpoúrednio przed zwolnieniem pamiíci zajmowanej przez te zmienne.

Składniki klasy dostępne tylko dla metod CzÍsto wygodnie jest zadeklarowaê sk adnik klasy jako dostípny tylko dla metod bídπcych jej sk adnikami. W tym celu trzeba poprzedziê jego definicjí modyfikatorem dostípu private. class Tablica private: double *elem; int n; double& operator [](int n); void init(int n_el); Tablica(int n_el); Tablica(int n_el, double r); ~Tablica(void); ; void Tablica::init(int n_el) elem = new double[n_el]; // OK if (elem) // OK n = n_el; // OK Tablica tab(10); cout << tab.n << endl; // B πd!

Czytanie oraz zapis do pliku w C++ Pliki tekstowe (Aąbf#$123&) Pliki binarne (10011011010110110)

Definiowanie strumienia obsługa struminia program-konsola (ekran, klawiatura) klasa <iostream> cout cin obsługa strumienia program-dysk (plik) klasa <fstream> ofstream plik; ifstream plik; uwagi obiekt cout predefiniowany obiekt cin predefiniowany

Pobieranie danych ze strumienia operator lub funkcja >> get(char* gdzie, int ile, char ogran = \n ) Uwagi Operator >> domyślnie pomija białe znaki. Wczytuje ciąg znaków do pojawiania się kolejnego białego znaku Ogranicznik nie jest wyjmowany ze strumienia getline(char* gdzie, int ile, char ogran = \n ) Ogranicznik jest wyjmowany ze strumienia read(char* gdzie, int ile) Nie dopisuje na koncu stringu znaku NULL

Pliki tekstowe - odczyt #include<iostream> #include<fstream> Dodajemy klasę fstream using namespace std; int main(int argc, char *argv[])!! char *buff = new char;! ifstream plik;! plik.open("dane.txt");! plik.getline(buff, 99);! cout << ++buff << endl;! plik.getline(buff, 99);! cout << buff << endl;!! plik.close();! return 0; Definiujemy bufor na dane Definiujemy i otwieramy strumień Wczytujemy dane ze strumienia do bufora Zamykamy strumień

Zapisywanie danych do strumienia operator lub funkcja Uwagi << przekierowanie do strmienia put(char znak) Wstawia do strumienia jeden znak write(char* skąd, int ile) Wstawia do strumienia określoną ilość danych